c++ decltype

写代码有时会遇到这种情况:希望从表达式的类型推断出要定义的变量的类型,但是不想用该表达式的值初始化变量。

为了满足这一要求,c++标准引入了decltype运算符。它的作用是选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。

    const int c1 = 0;

    const int& c2 = c1;

    decltype(c1) x = 0; // x的类型是 const int

    decltype(c2) y = x; // y的类型是 const int&绑定到 x

    decltype(c2) z; // 编译错误,是一个引用,必须初始化

 

注意:如果表达式的内容是解引用操作,则decltype得到的类型为引用类型。

    int t = 1;

    int* p = &t;

    decltype(*p) x = test; // x 的类型为引用类型,而非int

切记:decltype((variavle))(注意是双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身就是一个引用时才是引用。

    int t = 1;

    decltype(t) x = 0; // 正确,是一个未初始化的 int

    decltype((t)) y; // 错误,的类型是 int& 必须初始化,如:decltype((test)) y = x;

原文地址:https://www.cnblogs.com/tongyishu/p/13295812.html