C++ 11 新标准学习记录2

1.nullptr, c++11 引入,nullptr是一种特殊类型的字面值.
int *p1= nullptr;


2.constexpr, c++11 允许将变量声明为constexpr类型以便由编译来验证变量的值是否是


一个常量表达式.
vs2012  sp3 暂不支持.


3.atuo, c++11 引入auto 类型说明符,能让编译器去分析表达式所属的类型。auto定义的


变量必须有初始值:
auto item = val1 + val2; //由val1 + val2的结果推断出item的类型 
auto一般会忽略掉顶层const,同时底层const会被保留下来:
const int ci = i, &cr = ci;
auto b = ci; //b是一个整数,ci的顶层const被忽略.
auto c = cr; //c是一个整数
auto d = &i; d是一个整形指针
auto e = &ci; //e是一个指向整数常量的指针, 对常量对象取地址是一种底层const.


4.decltype, c++11引入的第二种类型说明符,它的作用是选择并返回操作数的数据类型,在


此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值:
decltype(f()) sum = x;
编译器并不实际调用函数f,
  而是用当调用f()时返回的类型做为sum的类型.
decltype处理顶层const 和引用的方式与auto不同.
const int ci = 0, &cj = ci;
decltype(ci) x = 0; //正确 x 为const int
decltype(cj) y = x; //正确,y是const int& 
decltype(cj) z = x; // 错误,z是引用,必须初始化
//decltype的结果可以是引用类型
int i = 42, *p = &i;  &r = i;
decltype(r + 0)  b;  //b是一个未初化的int
decltype(*p) c;  //错误,c是int&,必须初始化. 如果表达式的内容是解引用操作,则decltype将得到引用类型。decltype(*p)的结果类型是int&, 而非int.


还有一处与auto的重要区别,对于decltype所用的表达式来说,如果变量名加上了一对括号,则得到的类型与不加括号时会有不同,如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型vk果给变量加上了一层或多层括号,编译器就会把它当成是一个表达式。变量是一种可以作为赋值语句左值的特殊表达式,所以这样的decltype就会得到引用类型:

decltype((i)) e; //e是int&,必须初始化.

关于类内初始值,经测试,vs2012暂时不支持.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值