auto:type inference(类型推测)
auto d = 5.0
,auto sum = add(5, 6)
等。英文参考:learn cpp 、 cpp reference 、 acodersjourney
- auto 最主要用作代替冗长的变量声明:(since c++11)
for(std::vector<std::string>::iterator it = vec.begin(); it != vec.end(); it++){
}
// 可以用下面简练的形式
for( auto it = vec.begin(); it != vec.end(); it++ ){...}
// 甚至这样, 注意e不是iterator是element
for ( auto e : vec){ cout << e;}
- auto声明变量
auto i = 0, *p = &i; // 编译器最后将auto替代为int
auto i = 10, j = 'a'; // ERROR, auto不能推测为一种类型
int a = 10, vec[3] = {1, 2, 3}
auto &b = a; //int &
const auto c = a; //const int
auto v1 = vec; // v1 is "int *"
auto& v2 = vec; // v2 is "int [3]"
- 后置返回类型(trailing return type syntax, c++11)
auto get_max(int a, int b) -> int{} // 此时auto并不推断类型,这只是将返回类型后置
- 推断函数返回类型(c++14)
auto get_max(int a, int b){} // 注意这里不是后置返回类型,这里是根据函数参数推断返回类型
auto get_max(auto a, auto b){}
// ERROR,auto不能在普通函数参数处使用(在lambda和template函数中可用, c++14)
- 与lambda搭配使用(c++14)
auto my_sum = [](int a, int b) { return a + b;};
my_sum(2, 3);
//相当于下面, std::function (在<functional> 头文件,c++11)
std::function<int(int, int)> my_sum2 = [](int a, int b) { return a + b;};
my_sum2(2, 3);