auto的優(yōu)勢
第一點送膳,顯而易見躺率,就是方便寫咪鲜,尤其是模板套模板券册、名字空間套名字空間的變量奈籽,展現(xiàn)出來比Java的優(yōu)越性了厘惦。
第二點偷仿,可以避免一些類型聲明時的錯誤,比如使用了庫中的某變量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);
}
第三點,其“自適應(yīng)”性能夠一定程度上支持泛型編程稼稿。還是上面的例子薄榛,如果operator返回值類型變了,main函數(shù)不需要進(jìn)行修改就能適配让歼。下面的程序敞恋,不用管a和b的類型是什么,都可以進(jìn)行適配谋右。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);
}