关于 auto
C++11 中引进了auto。auto 即自动类型,可以让我们声明一个变量而无需指定其类型,类型会根据初始值而被确定。下文介绍如何使用auto以及一些注意事项。
如何使用
一个简单的例子:
auto var_1 = 5;
auto var_2 = 'C';
cout << typeid(var_1).name() << endl; //int
cout << typeid(var_2).name() << endl; //char
除了内置类型外,我们甚至可以将函数和迭代器放到auto类型里面。下面的代码使用auto来声明一个Lambda表达式:
auto fun_sum = [](int a, int b){ return a + b;};
cout << typeid(fun_sum).name() << endl; //class <lambda_4a7ee7e2e99eb5d965127652e6ce69b5>
当类型名很长时,auto 的作用就凸显出来了,假设我们有一个map
, 则使用auto 能让代码美观不少:
map<string, string> mapOfStrs;
map<string, string>::iterator it = mapOfStrs.begin();
auto it2 = mapOfStrs.begin();
cout << (it2 == it ? "Yes" : "No") << endl; //Yes
注意事项
-
一旦auto类型的变量被初始化,就不能更改其类型
auto a = 1; a = "1"; //错误
-
必须在声明时初始化
auto a; //错误
-
若函数的返回值为auto类型时需要通过特别的方法来声明
auto get_sum(int a, int b)->int{ return a + b; }
-
调用返回auto的函数
int a = get_sum(1, 2); auto b = get_sum(1, 2);