请考虑以下事项:
string const& name1 = get_name(...);
string const name2 = get_name(...);
其中get_name
返回string
个对象。众所周知,随着C ++ 11中移动语义的引入,两个语句都是高效的,第一个语句稍微更加如此,因为不需要进行移动。 (是的,我知道返回值优化,所以它稍微有些细微差别。但这是一般的想法。)
但是,假设函数调用不在此范围内:
string const& name3 {"Billy"};
string const name4 {"Debbie"};
在这种情况下,字符串文字"Billy"
被隐式转换为临时string
,name3
绑定到临时文件。显然,name4
不是暂时的。
对于name3
和name4
,两者都同样有效吗?在我看来它会......
答案 0 :(得分:1)
name3
或name4
,否则 decltype(name3)
和decltype(name4)
无法与计划的其余部分区分开来。
因此编译器可以为两种情况生成相同的程序集。
当然,这是一般性陈述;任何单个编译器都可能生成更慢或更快的代码,找到的唯一方法是在该编译器上尝试它。