dar*_*une 6 c++ forward-reference c++17
以下给出了编译器错误:
#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;
}
Run Code Online (Sandbox Code Playgroud)
链接到Godbolt:https://godbolt.org/z/l6IQQ7
如果我使用const auto&它可以编译-但这不会绑定到值。
auto&&将绑定到任何东西,以便自然也可以工作。但是,const auto&&在这种情况下不绑定背后的逻辑是什么?我知道auto&&会保留constness-但是有没有办法使之const明确,同时又与引用/值无关?
动机:
对于函数等内部的“正常编程工作”,可以说类似这样的东西很棒:“我不在乎它是值还是引用-但我不会在其余函数中更改它”。
给定当前语言,这应该是可能的。
相关问题: 为什么添加const会使通用引用成为右值
对于函数内部的“常规编程工作”,最好能说这样的话:“我不在乎它是值还是引用-但我不会在其余函数中更改它”。
您已经为您的动机准备了解决方案:使用const auto&。const auto&将绑定到:
这样您便拥有了所需的一切。是的,它与const rvalue引用不同,但是如果您只使用它,那将无关紧要,因为因为它是const,所以您无论如何都无法从它中移出。
最后说明:auto&&将始终是参考。它是一个带有推论的转发参考,但是您的最终变量将始终是参考(rvalue ref或lvalue ref,但绝不能是“ value”)。也许那是一个误解?
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |