[C++11阅读][3-2-2]auto类型推导(中)

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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。