详析C++中的auto
作者:Bitdancing
这篇文章主要介绍了详析C++中的auto,auto是具有自动存储器的局部变量,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而作为一个新的类型指示符来指示编译器,下面来看看文章的详细介绍吧
1.auto介绍
在早期,C/C++中 auto 的含义是:使用auto修饰的变量,auto是具有自动存储器的局部变量。
C++11中标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
可以使用typeid().name
去打印对象的类型。
案例分析:
int TestAuto() { return 2; } int main() { int a = 10; auto b = a; auto c = 'a'; auto d = TestAuto(); cout << typeid(b).name() << endl; cout << typeid(c).name() << endl; cout << typeid(d).name() << endl; return 0; }
输出结果:
int
char
int
注意:
auto e
; 无法通过编译,使用 auto
定义变量时必须对其进行初始化。
在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。
2.auto使用细则
auto 与指针和引用结合起来使用:
- 用auto声明指针类型时,用 auto 和 auto* 没有任何区别
- 用 auto 声明引用类型时则必须加&
案例分析:
int main() { int x = 10; auto a = &x; auto* b = &x; auto& c = x; cout << typeid(a).name() << endl; cout << typeid(b).name() << endl; cout << typeid(c).name() << endl; *a = 20; *b = 30; c = 40; return 0; }
输出结果:
int * __ptr64
int * __ptr64
int
在同一行定义多个变量:
在同一行定义多个变量时,这些变量必须是相同的类型,否则编译器将会报错。因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
3.auto不能推导的场景
auto 不能作为函数的参数:
auto 不能直接用来声明数组:
void TestAuto() { int a[] = {1,2,3}; auto b[] = {4,5,6}; }
为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法
auto在实际中最常见的优势用法就是跟C++11提供的新式for循环,还有lambda表达式等进行配合使用。
到此这篇关于详析C++中的auto的文章就介绍到这了,更多相关C++中的auto内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!