zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    BZOJ2870 最长道路
    BZOJ1316 树上的询问
    BZOJ2238 Mst
    BZOJ4242 水壶
    [BeiJing2010组队]次小生成树Tree
    CODEVS1403 新三国争霸
    牛客网NOIP赛前集训营-提高组(第六场) C-树
    JSOI2008 最小生成树计数
    BZOJ2654 Tree
    牛客网NOIP赛前集训营-提高组(第六场)B-选择题
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13295812.html
Copyright © 2011-2022 走看看