auto
这个关键字在C++11之前就存在的,只不过当时它的含义是指明对象的存储期。这个用途在C++11中已经删除了,所以忽略这个就可以了。
C++11更改了auto
的用途,使其类似于C#中的var
。这可以说是一个令人激动的改变。最大的好处就是我们在生命对象的时候可以不必明确的指定它的类型了。
int i = 1; //C++11 之前
auto i = 1; //C++11
std::chrono::time_point<std::chrono::high_resolution_clock> time_point = std::chrono::high_resolution_clock::now(); //C++11 之前
auto time_point = std::chrono::high_resolution_clock::now(); //C++11
//note:std::chrono 是在C++11才有的,这里也是为了说明 auto可以是声明表达式变得简单
从上面的例子来看,auto
是我们少写很多代码。
具体的讲一下auto
的一些限制
- 如果
auto
用于声明多个变量,推导出来的类型必须是匹配的。
auto i = 0, d = 0.0; //ill formed, i 是 int, d是double,两者并不匹配
auto i= 0, *p = &i; //auto被推导为 int
- 不允许在同一个声明中既声明变量又声明函数
auto f()->int , i=0;
- 由于
auto
之前的用法,也就是在本文一开始的时候讲的,所以要注意auto
在C和C++中的区别。
auto int x; //在C++98中是有效的,在C++11中是错误的
auto x; //在C语言中是有效的,在C++中是无效的
网友评论