博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++学习笔记之模版 remove_reference(引用移除)
阅读量:5891 次
发布时间:2019-06-19

本文共 1535 字,大约阅读时间需要 5 分钟。

int main(){  int a[] = {
1,2,3}; decltype(*a) b = a[0]; a[0] = 4; cout << b; //输出4 return 0;}

输出为4,因为decltype(*a)返回*a的类型,实际上是一个int&,我们就想有没有办法去掉这个引用

尝试1

template 
class remove_reference{public: typedef T type;};int main(){ int a[] = {
1,2,3}; remove_reference
::type b = a[0]; a[0] = 4; cout << b; //输出4中, return 0;}

我们引入了类remove_reference用于移除引用,在编译期间,推导出了类型T为int&,typedef T type中,type实际上就是类型int&,因此结果还是4

尝试2

template 
class remove_reference{public: typedef T type;};template
class remove_reference
{public: typedef T type;};int main(){ int a[] = {
1,2,3}; remove_reference
::type b = a[0]; a[0] = 4; cout << b; //输出1 return 0;}

我们对模版类进行特化,特化为引用,当T为int&时,在类内实际的T为int,完成了引用移除的功能

 

因此我们找到了一种方法实现类型T,T&,T*间的相互转化,如下所示

template 
class GetType{public: typedef T type; typedef T& type_ref; typedef T* type_pointer;};template
class GetType
{public: typedef typename remove_reference
::type type; typedef typename remove_reference
::type_ref type_ref; typedef typename remove_reference
::type_pointer type_pointer;};template
class GetType
{public: typedef typename remove_reference
::type type; typedef typename remove_reference
::type_ref type_ref; typedef typename remove_reference
::type_pointer type_pointer;};

 

转载于:https://www.cnblogs.com/creativityroom/p/6891772.html

你可能感兴趣的文章
Java 记事本代码
查看>>
Redis源码阅读笔记-链表结构
查看>>
pl/sql 字符集设定
查看>>
Java线程:条件变量 lock
查看>>
Java多线程之Callable接口的实现<有返回值的线程>
查看>>
从Collection中选取对象的一种优雅写法
查看>>
-Java- Maven命令
查看>>
struts2文件下载
查看>>
Jackson 框架,轻易转换JSON
查看>>
u-boot传递cmdline 开启kernel打印
查看>>
注解学习day_1
查看>>
java内存堆栈与引用之间的关联
查看>>
ubuntu中安装sqldeveloper和JDK 1.7
查看>>
jsp如何实现下载文件的功能
查看>>
Java之LinkedList源码解读(JDK 1.8)
查看>>
html禁止清除input文本输入缓存
查看>>
安装ubuntu/win7后选择win7出现 a read disk error occurred
查看>>
WebStorm主题设置
查看>>
RDS
查看>>
HibernateTemplate 和HibernateDaoSupport的session
查看>>