C++_auto的新含义

auto简介

在早期的C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但是基本没有人去使用它.
该关键字的作用是将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量,但是由于所有的变量默认就是auto,所以该关键字基本不被使用.

auto新含义

C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得.
例:

int a = 0;
double b = 3.14;
char c = 'c';
/*---a1为int型---*/
auto a1 = a;
/*---b1为double型---*/
auto b1 = b;
/*---c1为char型---*/
auto c1 = c;

注意:使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型.因此auto并非是一种类型的声明,而是一个类型声明时的占位符,编译器在编译期会将auto替换为变量实际的类型.

auto使用细则

①auto与引用和指针结合起来用
用auto声明指针类型时,用auto和auto*没有任何区别,但是用auto声明引用类型时必须加上&

②在同一行定义多个变量
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器会报错,因为编译器只对第一个类型进行推导,然后用推导出来的类型来定义其他变量.
例:

auto a = 1, b = 2;

auto不能推导的场景

①auto不能作为函数的参数

②auto不能直接用来声明数组

扫描二维码关注公众号,回复: 4340043 查看本文章

③为了避免与C98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法

④auto在实际中最常见的优势用法就是跟以后会讲的C++11提供的新式for循环,还有lambda表达式等进行配合使用

⑤auto不能定义类的非静态成员变量

⑥实例化模板时不能使用auto作为模板参数

猜你喜欢

转载自blog.csdn.net/sss_0916/article/details/84321125