C++备忘录050:auto初始化的一些边角例子

赋值时,auto本身会去掉顶级(top level)的const/volatile和引用,但是总有一些边边角角要注意的

auto a{3}; // int

但是

auto b = {3}; // std::initializer_list<int>

P.S. 在-std=c++11并且gcc5/clang4.8之前的编译器版本下,auto a{3}也是std::initializer_list类型

auto c = (int){3};

这里cint型,不过gcc和clang都会给出警告

varint型,那么

int* const cptr = &val;
auto d{cptr}; // int*

因为这里const是直接修饰cptr的,是top level的const所以去掉了

什么算top level的const呢,

We use the term top-level const to indicate that the pointer itself is a const

于是

int const* ptr = &val;
auto c{ptr}; // int const*

这里的const就不是top level了,所以没有被去掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值