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

Is copy or move constructor of std::string called when I return string literal?

假设我们有这两个函数:

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

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

我认为在 foo 中将构建字符串,然后复制然后返回,而在第二个中将构建并移动字符串。

我说的对吗?或者两种情况相同?

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

但这两种情况是一样的。

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

return std::string("myString");

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