如何从函数传回创建的字符串

时间:2016-08-18 18:50:16

标签: c++

这会在返回时复制还是编译器会做一些魔术?什么是神奇的共享堆栈空间?

string getCamel()
{
    string s = "Camel";
    return s;
}

main()
{
    string myStr = getCamel();
}

1 个答案:

答案 0 :(得分:1)

编译器可以执行" magic"直接在返回时分配给的变量中构造字符串。这被称为" copy elision"和"返回值优化"。允许这样做,虽然不是必需的(直到C ++ 17,在某些情况下需要 )。

使用C ++ 11及更高版本,编译器还可以选择"移动"如果类型具有移动构造函数,则变量进入目标 - 比复制成本更低,但仍然比仅仅忽略操作并直接在目标中构建更昂贵。

有关详细信息,请参阅这些参考资料:

http://en.cppreference.com/w/cpp/language/copy_elision

https://en.m.wikipedia.org/wiki/Return_value_optimization

http://en.cppreference.com/w/cpp/language/move_constructor