哪个更好:return std::string 按值还是按常量引用?
What is better: return std::string by value or by constant reference?
这里有一个 class 有两个 return 类型不同的吸气剂:
class A {
std::string m_test { "test" };
public:
std::string test_by_value { return m_test; }
const std::string& test_by_const_ref() { return m_test; }
};
// ...
哪个更好?它是关于 std::string,而不是内置类型。
是S.T.L。 https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中说按值return更好,因为多副本会优化?还是我理解错了?
按值。
我在野外遇到过类似的代码:
A foo();
std::string const& x = foo().test_by_const_ref();
繁荣,x
是悬空引用。
按值 returns 不会发生这种情况。
link 是正确的,return string
个对象的值。 NRVO 将在幕后处理 returning 引用,因此您的代码将具有完美的语义和清晰度。
Return 按值,因为编译器将优化 return 值。
这里有一个 class 有两个 return 类型不同的吸气剂:
class A {
std::string m_test { "test" };
public:
std::string test_by_value { return m_test; }
const std::string& test_by_const_ref() { return m_test; }
};
// ...
哪个更好?它是关于 std::string,而不是内置类型。 是S.T.L。 https://channel9.msdn.com/Events/GoingNative/2013/Don-t-Help-the-Compiler中说按值return更好,因为多副本会优化?还是我理解错了?
按值。
我在野外遇到过类似的代码:
A foo();
std::string const& x = foo().test_by_const_ref();
繁荣,x
是悬空引用。
按值 returns 不会发生这种情况。
link 是正确的,return string
个对象的值。 NRVO 将在幕后处理 returning 引用,因此您的代码将具有完美的语义和清晰度。
Return 按值,因为编译器将优化 return 值。