我在某处找到了以下代码,我想知道它在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
}
是的
实际上构造了3个对象:ret
due string ret;
,由于due的临时对象return ret;
,以及var
根据上述返回的临时对象构造的对象。
编译器可能会优化掉临时构建var
的ret
直接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句