美文网首页
[C++11阅读][3-2-2]auto类型推导(中)

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

作者: 凌霄阁2010 | 来源:发表于2020-06-25 12:12 被阅读0次

    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);
    }
    

    相关文章

      网友评论

          本文标题:[C++11阅读][3-2-2]auto类型推导(中)

          本文链接:https://www.haomeiwen.com/subject/snlkfktx.html