A.7-chinese
A.7 自动推导变量类型
C++是静态语言:所有变量的类型,都会在编译时被准确指定。所以,作为程序员你需要为每个变量指定对应的类型。
有些时候就需要使用一些繁琐类型定义,比如:
1 | std::map<std::string,std::unique_ptr<some_data>> m; |
常规的解决办法是使用typedef来缩短类型名的长度。这种方式在C++11中仍然可行,不过这里要介绍一种新的解决办法:如果一个变量需要通过一个已初始化的变量类型来为其做声明,那么就可以直接使用auto关键字。这样,编译器就会通过已初始化的变量,去自动推断变量的类型。
1 | auto iter=m.find("my key"); |
当然,auto还有很多种用法:可以使用它来声明const、指针或引用变量。这里使用auto对相关类型进行了声明:
1 | auto i=42; // int |
变量类型的推导规则是建立一些语言规则基础上:函数模板参数。其声明形式如下:
1 | some-type-expression-involving-auto var=some-expression; |
var变量的类型与声明函数模板的参数的类型相同。要想替换auto,需要使用完整的类型参数:
1 | template<typename T> |
在使用auto的时候,数组类型将衰变为指针,引用将会被删除(除非将类型进行显式为引用),比如:
1 | int some_array[45]; |
这样能大大简化变量的声明过程,特别是在类型标识符特别长,或不清楚具体类型的时候(例如,调用函数模板,等到的目标值类型就是不确定的)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Estom的博客!










