c++11中 auto&定义的引用为什么不能绑定字面值
答案:2 悬赏:70 手机版
解决时间 2021-04-07 04:13
- 提问者网友:蓝琪梦莎
- 2021-04-06 16:21
c++11中 auto&定义的引用为什么不能绑定字面值
最佳答案
- 五星知识达人网友:不如潦草
- 2021-04-06 17:02
auto关键字推导,一般情况下跟函数的模板参数推导规则一样,主要有一下三种情况
先看一个模板函数template void Foo(T& foo); Foo(value);
再回到楼主的auto& foo = value;
1. auto等同于T
2. foo的类型由T&(auto&)决定
3. value可以是一个右值,也可以是一个左值;
推导规则
a. 那么auto和T的类型推导,无论value是何种类型,都将忽略引用修饰符!
b. const与volatile关键字不会被忽略
楼主的auto& h = 42;
编译器将auto推导为int,但是int&不能绑定到一个纯右值,所以无法通过编译
先看一个模板函数template
再回到楼主的auto& foo = value;
1. auto等同于T
2. foo的类型由T&(auto&)决定
3. value可以是一个右值,也可以是一个左值;
推导规则
a. 那么auto和T的类型推导,无论value是何种类型,都将忽略引用修饰符!
b. const与volatile关键字不会被忽略
楼主的auto& h = 42;
编译器将auto推导为int,但是int&不能绑定到一个纯右值,所以无法通过编译
全部回答
- 1楼网友:一袍清酒付
- 2021-04-06 18:23
字面值是纯右值,你应该使用右值引用,例如:
auto&& suibian = 5;
这样的语句才是正确的
auto&& suibian = 5;
这样的语句才是正确的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯