C++11之前和c语言 auto用来声明变量的存储类型(自动变量 栈区) 在编译期间 编译器能够根据变量或者表达式推导七类型 auto 与 const 时: 普通数据在推导时const属性会被抛弃 但是指针或者引用有const时 自动推导时不会抛弃
1.不能用于函数的参数列表 2.auto不能作用于类的非静态成员 3.auto 关键字不能定义数组 4.auto不能作用于模板参数 auto的应用 1.for循环 for(auto& var:container) { } 为自己写的 2.接收函数返回值 如果调用一个函数返回值类型可能有多个 3.定义容器迭代器 4.用于泛型编程 新式for循环 底层原理是新式迭代器 只要对象支持迭代器的功能 可以用for循环 for(类型)
上面举的这个例子很简单,在真正编程的时候也不建议这样来使用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++) { //.. } }