zoukankan      html  css  js  c++  java
  • decltype类型指示符

    一、关键词

    • 从表达式的类型推断出要定义的变量的类型

      示例:decltype(i) x = 0;    //等价于int x = 0;

    二、复合类型、const

    	const int ci = i, &cj = ci;
    	decltype(ci) x = 0;		//保留顶层const,x的类型是const int 
    	decltype(cj) y = x;		//y的类型是const int &,而不是ci的类型,y绑定到变量x 
    	decltype(cj) z;			//错误:z是一个引用,必须初始化

    1. 引用

      和auto不同,当表达式为一个引用别名时,它不会将类型声明为该别名所绑定的对象的类型,而是保留为引用的类型

    2. const

      和auto不同,它可以保留顶层const

    三、decltype和引用

    如果decltype使用的表达式不是一个变量,则decltype返回表达式结果对应的类型。

    注:有些表达式会向decltype返回一个引用类型,这一般意味着该表达式的结果对象可以作为一条赋值语句的左值

    1. 如果表达式的内容是解引用操作,则decltype将得到引用类型。

    如:int i = 3, *p = &i;  decltype(*p) c = i;    //c是int &,必须初始化

    2. 如果给变量加上一层或多层括号,编译器会把它当作一个表达式,同样会得到引用类型。

    如:decltype((i)) d = i;      //d是int &,必须初始化

    【补充】

    举例:使用关键字decltype的时候,其表达式的求值结果若是左值,decltype作用于该表达式(不能是变量)得到一个引用类型。例如,p的类型是int *,因为解引用运算符生成左值,所以decltype(*p)的结果是int &。而另一方面,因为取地址运算符生成右值,所以decltype(&p)的结果是int **,即结果是一个指向整型指针的指针。

  • 相关阅读:
    【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题
    修改json对象的每一个值
    浏览器各个版本和系统(chrome/safari/edge/qq/360)
    数据库书籍推荐排行榜
    git-将dev代码合并到test
    npm install报错
    slice()和splice()区别
    在Eclipse中使用JUnit4进行单元测试(初级篇)
    [转载]Jmeter那点事·ForEach和If控制器
    java语言写文件内容
  • 原文地址:https://www.cnblogs.com/xzxl/p/7651426.html
Copyright © 2011-2022 走看看