假设某个函数具有签名
std::string GetString();
并按值返回一个新字符串。现在给出以下代码:
// (a) Store the return value to a const reference.
const std::string& my_string = GetString();
// (b) Store the return value to a (const) value.
const std::string my_string = GetString();
我是否正确理解(a)和(b)从C ++ 11编译器的角度来看是相同的?如果是这样,对风格的选择是否有一个粗略的共识?
答案 0 :(得分:1)
我是否正确理解(a)和(b)从C ++ 11编译器的角度来看是相同的?
不,他们不一样。
(a)延长GetString()
返回的临时对象的生命周期。
(b)制作一个新对象。它由以下构成:
std::string
的返回值作为参数调用GetString()
的复制构造函数,GetString()
的返回值
GetString()
。答案 1 :(得分:0)
理论上它们是不同的,但实际上它们是相同的。您可以编写的唯一代码来说明差异将涉及decltype(my_string)
。
编译器可以为两者生成相同的程序集。