C++11decltype类型指示符
来源:互联网 发布:荣耀盒子pro 软件 编辑:程序博客网 时间:2024/04/28 22:30
C++11引入类型说明符decltype,作用是选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不计算表达式的值:
decltype(f()) sum = x; //sum的类型就是函数f返回的类型
编译器并不实际调用函数f,而是返回f调用发生时的返回类型作为sum的类型。
decltype与const
decltype处理const和引用的方式与auto有些不同。如果decltype使用的表达式是一个变量,则其返回类型为变量的类型(包括顶层const与引用在内):
const int ci = 0, &cj = ci;decltype(ci) x = 0; //x的类型是const intdecltype(cj) y = x; //y的类型是const int &,y绑定到xdecltype(cj) z; //错误,z是一个引用,应当初始化
引用从来都是作为其所指对象的同义词出现,只有在decltype处是一个例外。
decltype和引用
如果decltype的表达式不是一个变量,则decltype返回表达式结果对应的类型。
int i = 42, *p = &i, &r = i;decltype(r + 0) b; //正确,加法的结果是int,因此b是一个未初始化的intdecltype(*p) c; //错误,c是int&,必须初始化
r是一个引用,因此decltype(r)的结果仍然是一个引用类型,如果想让结果是r所指的类型,则 可以把r作为表达式的一部分,如r+0,这个表达式的结果是一个具体的值而非引用。
如果一个表达式是解引用操作,则decltype将得到引用类型。解引用指针可以得到指针所指的对象,而且还能给这个对象赋值,因此decltype(*p)的类型就是int &而非int。
decltype与表达式形式
decltype的结果类型与表达式形式密切相关。如果decltype使用的是一个不加括号的变量,则得到的结果类型就是该变量的类型。而如果加上了一层或者多层括号,编译器会将其当成一个表达式。变量是一种可以作为赋值语句左值的特殊表达式,所以decltype就会得到引用类型:
int i = 42;decltype((i)) d; //错误,d是引用,必须初始化decltype(i) e; //正确,e是一个为初始化的int
decltype((variable))的结果永远都是引用。
阅读全文
0 0
- [C++] decltype类型指示符
- decltype类型指示符
- decltype类型指示符
- C++11 decltype类型指示符
- C++11decltype类型指示符
- c++(15)处理类型--decltype类型指示符
- C++11特性——decltype类型指示符
- 类型别名,auto类型说明符,decltype类型指示符
- c++基础--auto类型说明符/decltype类型指示符
- const关键字核心相关知识及decltype类型指示符
- C++0x新特性:decltype类型指示符与返回类型后置语法
- C++0x新特性:decltype类型指示符与返回类型后置语法
- C++primer---constexpr、类型别名、auto、decltype
- decltype类型
- C++11新特性:类型别名,auto类型,decltype类型
- extern "C"链接指示符
- 链接指示符extern “C”
- 接指示符extern C
- 《Effective C++》(五)
- 如何更改matlab启动时的默认路径?
- 微服务架构探索
- 2440移植Linux Kernel笔记(七)------网卡驱动
- Ubuntu配置negix并开机自启动
- C++11decltype类型指示符
- java数据结构——AvlTree(平衡二叉查找树)
- spring singleton与prototype的引用关系
- unity 通过使用 photon networking Pun 实现 HTC Vive VR的多人联网。进阶版 《三》
- java中获取微信的openid
- linux设备树dts移植详解
- 如何快速转发csdn博客?
- 《统计学习方法》笔记——决策树之ID3算法
- Linux 磁盘管理(四)