const-reference绑定到临时

时间:2016-06-02 01:37:24

标签: c++ c++11

请考虑以下事项:

string const& name1 = get_name(...);
string const  name2 = get_name(...);

其中get_name返回string个对象。众所周知,随着C ++ 11中移动语义的引入,两个语句都是高效的,第一个语句稍微更加如此,因为不需要进行移动。 (是的,我知道返回值优化,所以它稍微有些细微差别。但这是一般的想法。)

但是,假设函数调用不在此范围内:

string const& name3 {"Billy"};
string const  name4 {"Debbie"};

在这种情况下,字符串文字"Billy"被隐式转换为临时stringname3绑定到临时文件。显然,name4不是暂时的。

对于name3name4,两者都同样有效吗?在我看来它会......

1 个答案:

答案 0 :(得分:1)

除非您专门使用name3name4,否则

decltype(name3)decltype(name4)无法与计划的其余部分区分开来。

因此编译器可以为两种情况生成相同的程序集。

当然,这是一般性陈述;任何单个编译器都可能生成更慢或更快的代码,找到的唯一方法是在该编译器上尝试它。