当我返回字符串文字时,是否复制或移动了std :: string的构造函数?

时间:2015-07-19 11:36:41

标签: c++ stdstring

假设我们有这两个功能:

std::string foo()
{
    return "myString";
}

std::string goo()
{
    return std::string("myString");
}

我想在foo中将构造字符串,然后复制然后返回,而在第二个字符串中它将被构造和移动。

我说错了吗?或两种情况都一样?

1 个答案:

答案 0 :(得分:2)

它取决于NRVO/RVO和c ++标准(移动或复制构造函数)。

但两种情况都是一样的。

在一个中您隐式转换为std::string但在第二种情况下您已明确创建了一个对象:

return std::string("myString");

What is (N)RVO and copy/move elision?