auto声明的变量必须被初始化,以使编译器能够从其初始化表达式中推导出其类型。从这个意义上来讲,auto并非一种“类型”声明,而是一个类型声明时的“占位符”,编译器在编译时期会将auto替代为变量实际的类型。
auto优势(一) auto推导的一个最大优势就是在拥有初始表达式的复杂类型变量声明时的简化代码。 例如
void loop(std::vector<std::string> &val){
//这里进行了较长的书写
std::vector<std::string>::iterator i = val.begin();
for(;i < val.end(); i++){
}
}
使用auto优化
void loop(std:vector<std::string> &val){
for(auto i=val.begin(); i<val.end(): i++){
}
}
auto优势(二) 可以免除程序员在一些类型声明时的麻烦,或者避免一些在类型声明时的错误。事实上,在c/c++中存在很多隐私转换或者用户自定义的类型转换 规则(比如整形与字符型进行加法运算后,表达式返回的是整形,这是一条隐式规则),这些规则并非很容易记忆,尤其是在用户自定义了很多操作符之后。 而这个时候,auto就有用武之地了。我们可以看看代码
class PI{
public:
double operator* (float v){
return (duoble)val *v;//这里是精度扩展了
}
const float val = 3.1415927f;
}
|