auto类型推导

情形 1 类型指示符是 一个 指针或引用,但不是一个通用引用。
情形 2 类型指示符是一个通用引用,auto&&,会保持右值的const属性。
auto&& uref1 = x; // x is int and lvalue,
// so uref1’s type is int&
auto&& uref2 = cx; // cx is const int and lvalue,
// so uref2’s type is const int&
auto&& uref3 = 27; // 27 is int and rvalue,
// so uref3’s type is int&&
情形 3 类型 指示符既不是指针也不是引用,是对等号右值的复制。

对于{}有特殊处理,auto会将{}推断为数组初始化,{}中间的如果类型不一样,则会编译失败
模板函数不支持直接传入{}包含的参数
但下面的方式是支持的
template
void f(std::initializer_list initList);
f({ 11, 23, 9 }); // T deduced as int, and initList’s
// type is std::initializer_list

上面是C++11的,C++14可以支持用auto定义返回值

auto 类型推导 通常 是与模板类型推导 一样 的, 但 auto 类型推导假定花括号初始化表
示 一个 std::initializer_list,而模板类型推导不是。
 auto用于函数返回类型或lambda形参时,应用的是模板类型推导,而不是auto类型推导。

有个特殊点,std::vector的[]返回的不是bool&,而是std::vector::reference对象,std::vector::reference的存在是因为std::vector做了特化,bool值做了封包处理,一个bit对应一个bool
std::vector::reference可以转换成bool,但是如果用auto指向的话,则不会发生reference转成bool的操作,导致不能预知的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值