C ++临时变量的生命周期

时间:2017-06-15 22:18:32

标签: c++ pointers

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

有些情况下我们会做类似以下的事情:

SomeFunctionReturningStdString().c_str();

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

然而,我们发现这导致了未定义的行为,并提出了两个解决此问题的建议:

std::string temp = SomeFunctionReturningStdString();
temp.c_str();

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

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

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

2 个答案:

答案 0 :(得分:1)

  

两种解决方案都有效吗?

第一个是有效的。

如果在SomeFunctionReturningStdString()返回后返回引用的对象仍处于活动状态,则第二个将有效。如果不查看SomeFunctionReturningStdString()中的代码以及如何定义它返回引用的对象,就不可能判断这是否正确。

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

答案 1 :(得分:0)

如果您收到了返回的值,只要它在使用它的单个表达式中生存,它就会生存。为了保存它,您必须创建某种类型的变量,至少具有直接封闭块的范围来存储它并将值赋给该变量。我希望这是有道理的。

相关问题