你能在C++中返回一个字符串对象的局部变量吗?

use*_*807 2 c++ memory-leaks copy-constructor

我在某处发现了以下代码,我想知道它是否合法在C++中.ret变量是堆栈变量,一旦foo返回分配给ret的内存不再存在.但是string是一个类,我认为复制构造函数被调用来将ret的内容复制到var.这是真的?以下是一段有效的代码吗?

    string foo(int x)
    {
        string ret; 
        //some operation on ret

        return ret; 
    }
    string callingFunc()
   {
        string var = foo(2); 
        // some operation on var
   }
Run Code Online (Sandbox Code Playgroud)

Seb*_*ann 5

是的

实际上构造了3个对象:ret由于string ret;,临时由于所提到的返回临时return ret;var构造的.

编译器可能会优化掉临时构建varret直接.