以下给出了编译器错误:
bash: /home/XXX/.local/bin/pip: /home/XXX/anaconda3/bin/python: bad interpreter: No such file or directory
链接至“ godbolt”:https://godbolt.org/z/l6IQQ7
如果我使用 #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;
}
,它将编译-但这不会绑定到值。
const auto&
将绑定到任何东西,因此自然也可以工作。
但是,在这种情况下,auto&&
不绑定背后的逻辑是什么?
我知道const auto&&
将保留常量性-但是有一种方法可以使auto&&
明确,同时又与参考/值无关?
动机:
对于函数内部的“正常编程工作”,最好能说类似以下内容:“我不在乎它是值还是引用-但我不会在其余部分更改它函数” 。
使用当前语言,应该可以做到这一点。
相关问题: Why adding `const` makes the universal reference as rvalue
答案 0 :(得分:5)
对于函数内部的“正常编程工作”,这将是很棒的 可以这样说:“我不在乎这是一个价值还是 参考-但我不会在其余功能中更改它。”
您已经有了动机的解决方案:使用const auto&
。 const auto&
将绑定到:
因此您拥有了所需的一切。是的,它与const rvalue引用不同,但是,只要使用它就不会有问题,因为因为它是const,所以无论如何都无法从它中移出。
最后注意:auto&&
将始终是参考。它是带有推论的转发参考,但是您的最终变量将始终是参考(rvalue ref或lvalue ref,但绝不能是“ value”)。也许那是一个误解?