以下代码会产生编译错误:
#include <string>
const std::string& get_name();
int main(){
auto&& name1 = get_name();//should bind to whatever
const auto& name2 = get_name();//also ok
const auto&& name3 = get_name();//<-not ok, why ?
return 0;
}
链接到godbolt:https://godbolt.org/z/l6IQQ7
如果我使用const auto&
,它可以编译 - 但不会绑定到值。
auto&&
将绑定到任何东西,因此自然也可以工作。
然而,为什么const auto&&
在这种情况下不能绑定?
我知道auto&&
将保留常量性 - 但是否有一种方法既显式地指定const
,又同时是引用/值不可知的?
动机:
对于函数等内部“普通编程工作”,能够说出这样的话非常好:“我不在乎它是值还是引用 - 但是我不会在函数的其余部分中更改它”。
当前语言应该支持这种做法。
相关问题: Why adding `const` makes the universal reference as rvalue
auto
相同,我认为我们可以关闭它? - lubgr