auto 自动类型推导
C++11之前和c语言 auto用来声明变量的存储类型(自动变量 栈区)
在编译期间 编译器能够根据变量或者表达式推导七类型
auto 与 const 时:
普通数据在推导时const属性会被抛弃
但是指针或者引用有const时 自动推导时不会抛弃
auto的限制:
1.不能用于函数的参数列表
2.auto不能作用于类的非静态成员
3.auto 关键字不能定义数组
4.auto不能作用于模板参数
auto的应用
1.for循环
for(auto& var:container)
{
}
为自己写的
2.接收函数返回值 如果调用一个函数返回值类型可能有多个
3.定义容器迭代器
4.用于泛型编程
新式for循环
底层原理是新式迭代器 只要对象支持迭代器的功能 可以用for循环
for(类型)
auto用法
上面举的这个例子很简单,在真正编程的时候也不建议这样来使用auto,直接写出变量的类型更加清晰易懂。下面列举auto关键字的正确用法。
用于代替冗长复杂、变量使用范围专一的变量声明。
想象一下在没有auto的时候,我们操作标准库时经常需要这样:
#include<string>
#include<vector>
int main()
{
std::vector<std::string> vs;
for (std::vector<std::string>::iterator i = vs.begin(); i != vs.end(); i++)
{
//...
}
}
这样看代码写代码实在烦得很。有人可能会说为何不直接使用using namespace std,这样代码可以短一点。
#include<string>
#include<vector>
int main()
{
std::vector<std::string> vs;
for (auto i = vs.begin(); i != vs.end(); i++)
{
//..
}
}