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 **,即结果是一个指向整型指针的指针。

  • 相关阅读:
    第四章 利用函数实现指定的功能
    5-7 点到原点的距离(多态)
    5-2 宠物的生长(多态)
    5-7 学生cpp成绩统计
    5-6 学生CPP成绩计算
    php将远程图片下载保存到本地
    vs2010 调试快捷键
    vs2010 快捷键大全
    [C#] 使用Application.AddMessageFilter当做Form的热键
    C# 收发和处理自定义的WINDOWS消息
  • 原文地址:https://www.cnblogs.com/xzxl/p/7651426.html
Copyright © 2011-2022 走看看