1.如果表达式是一个变量,则返回该变量的类型,注意这个地方引用和引用所指向的对象是分开的:
1 int i=0; 2 int &r=i;
这里面如果使用decltype(i),则得到的是一个int类型变量,如果使用decltype(r),则得到的是一个int类型的引用而非int型变量。进一步的将如果r是一个常量引用,则得到的也将是一个常量引用。
2.如果表达式不是一个变量(是一个运算)则返回表达式的(运算)结果对应的类型,应该是一个具体的值的类型。
1 1 int i=42,&r=i; 2 2 decltype(r+0) b;//r是i的引用,i的值为42,42+0=42,而42是一个整型,则decltype得到的是一个整型
3.如果表达式的内容是解引用操作,则decltype将得到引用类型。
1 int i=42,*p=&i; 2 decltype(*p) c;//错误c是int&(整型的引用),必须初始化
4.如果是decltype((variable))则结果永远是引用,如果是decltype()结果还是该变量的类型(注意引用和引用所指的对象是分开的)