• C++11新特性中的auto和decltype类型相信使用


    C++11新标准学习:decltype关键字

    1. decltype的意义

    有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(初始化可以用auto)。为了满足这一需求,C++11新标准引入了decltype类型说明符,它的作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。

    2. decltype用法

    • (1) 基本用法

    复制代码
    int getSize();
    ​
    int main(void)
    {
        int tempA = 2;
        
        /*1.dclTempA为int.*/
        decltype(tempA) dclTempA;
        /*2.dclTempB为int,对于getSize根本没有定义,但是程序依旧正常,因为decltype只做分析,并不调用getSize().*/
        decltype(getSize()) dclTempB;
    ​
        return 0;
    }
    复制代码
    • (2) 与const结合

    复制代码
        double tempA = 3.0;
        const double ctempA = 5.0;
        const double ctempB = 6.0;
        const double *const cptrTempA = &ctempA;
        
        /*1.dclTempA推断为const double(保留顶层const,此处与auto不同)*/
        decltype(ctempA) dclTempA = 4.1;
        /*2.dclTempA为const double,不能对其赋值,编译不过*/
        dclTempA = 5;
        /*3.dclTempB推断为const double * const*/
        decltype(cptrTempA) dclTempB = &ctempA;
        /*4.输出为4(32位计算机)和5*/
        cout<<sizeof(dclTempB)<<"    "<<*dclTempB<<endl;
        /*5.保留顶层const,不能修改指针指向的对象,编译不过*/
        dclTempB = &ctempB;
        /*6.保留底层const,不能修改指针指向的对象的值,编译不过*/
        *dclTempB = 7.0;
    复制代码
    • (3) 与引用结合

    • (4) 与指针结合

    3. decltype总结

    decltype和auto都可以用来推断类型,但是二者有几处明显的差异:

    1. auto忽略顶层const,decltype保留顶层const;

    2. 对引用操作,auto推断出原有类型,decltype推断出引用;

    3. 对解引用操作,auto推断出原有类型,decltype推断出引用;

    4. auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心。

    青青园中葵,朝露待日晞。 阳春布德泽,万物生光辉。 常恐秋节至,焜黄华叶衰。 百川东到海,何时复西归? 少壮不努力,老大徒伤悲!
  • 相关阅读:
    c#和unity引擎的所有笔记
    C#笔记(十九)——委托和事件
    委托
    c#笔记(十七)——队列
    js正则表达式
    mysql分页
    springMVC
    hibernate与spring整合实现transaction
    spring aop
    about hibernate lazy load and solution
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/14678407.html
Copyright © 2020-2023  润新知