当我 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?
假设我们有这两个函数:
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?