SomeFunctionReturningStdString

SomeFunctionReturningStdString

我的问题是关于C++中的临时变量以及如何最好地避免它们的陷阱。

在某些情况下,我们会执行以下操作:

SomeFunctionReturningStdString().c_str();

其中SomeFunctionReturningStdString()按值返回std::string

但是,我们发现这会导致行为不确定,并提出了两个建议来解决此问题:
std::string temp = SomeFunctionReturningStdString();
temp.c_str();

..类似于此link中指定的解决方案。

或者让SomeFunctionReturningStdString()通过引用返回std::string。这样,如果我的理解是正确的,则永远不应创建临时对象,因为现在我们已经引用了该对象。

两种解决方案都有效吗?它们都可以避免与临时变量相关的陷阱吗?

最佳答案



第一个有效。

如果您返回引用的对象在SomeFunctionReturningStdString()返回之后仍然存在,则第二个有效。在不查看SomeFunctionReturningStdString()中的代码以及如何定义返回引用的对象的情况下,无法判断这是否成立。

除非存在性能问题,否则最好使用第一个解决方案。这将更容易理解和维护。

10-08 11:36