【读书笔记】深入应用C++11代码优化与工业级应用 读书笔记01

第一章 使用C++11让程序更简洁、更现代

1.1  类型推导

1.1.1  auto类型推导

1、auto关键字的新意义

  不同于python等动态类型语言的运行时进行变量类型的推导,隐式类型定义的类型推导发生在编译期它的作用是让编译器自动推导出这个变量的类型,而不需要显示指定类型。

下面是auto的一些基本用法:

1 auto x = 5;                               //ok:x是int类型
2 auto pi = new auto(1);                  //ok:pi被推导为int*
3 const auto *v = &x, u = 6;                //ok:v是const int*类型,u是const int 类型
4 static auto y = 0.0;                      //ok:y是double类型
5 auto int r;                               //error:auto不再表示存储类型指示符
6 auto s;                                   //error:auto无法推导出s的类型                            

上面的代码中:字面量5是一个const int类型,变量x将被推导为int类型(const被丢弃,后面做说明),并被初始化为5;pi的推导说明auto还可以被用于new操作符;对于v和u的推导需要注意两点(1)虽然经过前面的const auto *v = &x的推导,auto的类型可以确定为int了,但是u仍然必须要写后面的“= 6”,否则编译将报错。(2)u的初始化不能编译器推导产生二义性。例如,把u的初始化改为“u = 6.0”,编译器将被会报错。

  使用auto声明的变量必须马上初始化(或者已经初始化完了,如上面的引用),以让编译器推导出它的实际类型,并在编译时将auto占位符替换为真正的类型

2、auto的推导规则

  auto可以结合指针、引用一起来使用,还可以带上cv限定符(cv-qualifier、const和volatile限定符的统称)。下面再看一些例子:

1.1.2  decltype关键字

1.1.3  返回类型后置语法---auto和decltype的结合使用

猜你喜欢

转载自www.cnblogs.com/xuelisheng/p/10662846.html