auto的优势
第一点,显而易见,就是方便写,尤其是模板套模板、名字空间套名字空间的变量,展现出来比Java的优越性了。
第二点,可以避免一些类型声明时的错误,比如使用了库中的某变量PI,不知道这个变量是什么类型的,也可能在不同硬件中类型不一样,auto可以适配多种类型,例如下面的例子。
class PI {
public:
double operator* (float v) {
return (double)val * v;
}
const float val = 3.1415927f;
};
int main() {
float radius = 1.7e10;
PI pi;
auto circumference = 2 * (pi * radius);
}
第三点,其“自适应”性能够一定程度上支持泛型编程。还是上面的例子,如果operator返回值类型变了,main函数不需要进行修改就能适配。下面的程序,不用管a和b的类型是什么,都可以进行适配。Max2相比Max1的好处是只计算了一次连加和连乘。
#define Max1(a,b) ((a) > (b))? (a) : (b)
#define Max2(a,b) ({ \
auto _a = a; \
auto _b = b; \
(_a > _b)? _a : _b;})
int main() {
int m1 = Max1(1*2*3*4, 5+6+7+8);
int m2 = Max2(1*2*3*4, 5+6+7+8);
}
网友评论