C++11的decltype关键字

C++11的decltype关键字

概述

decltype关键字和auto有异曲同工之处

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

使用方法

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

还有很多用法,此处暂不深究。

注意事项

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

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

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

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

  4. auto推断时会实际执行,decltype不会执行,只做分析

总之在使用中过程中和const、引用和指针结合时需要特别小心。

参考

https://www.cnblogs.com/cauchy007/p/4966485.html

原文地址:https://www.cnblogs.com/molinchn/p/13630716.html