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

How are created string passed back from function

本文关键字:函数 字符串 何创建 创建      更新时间:2023-10-16

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

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

编译器可以在返回时直接在被赋值的变量中构造字符串。这就是所谓的"复制省略"answers"返回值优化"。这是允许的,尽管不是必需的(直到c++ 17在某些情况下需要)。

在c++ 11及以后的版本中,如果类型有move构造函数,编译器还可以选择将变量"移动"到目标对象中,这比复制成本低,但比直接省略操作并在目标对象中构造成本更高。

查看这些参考资料了解更多细节:

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