我的问题是关于C++中的临时变量以及如何最好地避免它们的陷阱。
在某些情况下,我们会执行以下操作:
SomeFunctionReturningStdString().c_str();
其中
SomeFunctionReturningStdString()
按值返回std::string
。但是,我们发现这会导致行为不确定,并提出了两个建议来解决此问题:
std::string temp = SomeFunctionReturningStdString();
temp.c_str();
..类似于此link中指定的解决方案。
或者让
SomeFunctionReturningStdString()
通过引用返回std::string
。这样,如果我的理解是正确的,则永远不应创建临时对象,因为现在我们已经引用了该对象。两种解决方案都有效吗?它们都可以避免与临时变量相关的陷阱吗?
最佳答案
第一个有效。
如果您返回引用的对象在SomeFunctionReturningStdString()
返回之后仍然存在,则第二个有效。在不查看SomeFunctionReturningStdString()
中的代码以及如何定义返回引用的对象的情况下,无法判断这是否成立。
除非存在性能问题,否则最好使用第一个解决方案。这将更容易理解和维护。