c++:数据类型的推断type_traits
//推断左值右值引用
void main()
{
int i(10);//i是左值 有内存实体
int &ri(i);
int &&rri(i + 5);//右值引用
cout << is_lvalue_reference<decltype(i)>::value << endl;//是左值不是引用 输出0
cout << is_lvalue_reference<decltype(ri)>::value << endl;//是左值引用输出1
cout << is_lvalue_reference<decltype(rri)>::value << endl;//是右值引用输出0
cin.get();
} //此处的 decltype 引用常量都能够获取
//检測是否是数组
void main()
{
int a[5];
int *p = a;
cout << is_array<decltype(a)>::value << endl;//数组输出1
cout << is_array<decltype(p)>::value << endl;//非数组输出0
cin.get();
} void main()
{
int num = 123;
double db = 23;
cout << is_integral<decltype(num)>::value << endl;//推断数据类型 int 1
cout << is_integral<decltype(db)>::value << endl;//不是int型 0 string str1;//cpp中的string也是个类
cout << is_class<string>::value << endl;//1
cout << is_class<decltype(str1)>::value << endl;//1
cin.get();
} template<class T1,class T2>
void same(const T1 &t1, const T2&t2)
{
cout << is_same<T1, T2>::value << endl;//判定类型是否相等
}
//推断模板的数据类型
void main()
{
same(12, 34);//一样的数据类型输出 1
same(12, 34.23);//不一样输出 0
same('A', 34);//0
same("sdjbjabf", 34);//0
cin.get();
} template<class T1, class T2>
void same2(const T1 &t1, const T2&t2)
{
//cout << typeid(T1).name() << is_integral(t1) << endl;//error
cout << typeid(T1).name() << " " << typeid(t1).name() << " " << is_integral<T1>::value << endl;
cout << is_same<T1, T2>::value << endl;
}
//推断模板的数据类型
void main()
{
same2(12, 34);
same2(12, 34.23);
same2('A', 34);
same2("sdjbjabf", 34);
cin.get();
} int add()
{
return 0;
}
double check()
{
return 0;
}
class A
{};
class B
{};
template<typename T1,typename T2>
void check_type(const T1 &t1, const T2 &t2,typename enable_if<is_same<T1,T2>::value>::type*p=nullptr)
{
cout << t1<<" "<<t2 <<":类型同样"<< endl;
}
template<typename T1, typename T2>
void check_type(const T1 &t1, const T2 &t2, typename enable_if<!is_same<T1, T2>::value>::type*p = nullptr)
{
cout << t1 << " " << t2 << ":类型不同样" << endl;
}
//模板与type推断类型的异同 依据參数类型自己主动选择模板
void main()
{
check_type(12, 34);
check_type(12.34, 0.12);
check_type(12, 34.0); check_type(12, (float)34);
check_type((int)12.34, (int)0.12); check_type('A','\n');
check_type("1234", "abcd"); check_type(add, check);
A a;
B b;
check_type(&a, &b);
cin.get();
}
c++:数据类型的推断type_traits的更多相关文章
- WebKit Web Inspector增加覆盖率分析和类型推断功能
WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视 ...
- swift学习笔记1——基础部分
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- C++ new和delete具体操作符是怎样的
在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: int *p = (int*) malloc( sizeof(int) * 10 ); //分配10个i ...
- Studying-Swift :Day01
学习地址:http://www.rm5u.com/ 或 http://www.runoob.com/ 如果创建的是 OS X playground 需要引入 Cocoa; 如果我们想创建 ...
- C++学习3
C++仍然在使用C语言的 char.int.long 等基本数据类型,它们在现代操作系统(Windows XP.Win7.Win10 等)中的长度如下表所示: longlong是C99新增的一种数据类 ...
- android样式布局--->ListView(附上源代码)
在android应用开发过程中,Listview 是经常使用的数据展现控件,往往用于显示列表形式的数据. 假设只显示数据往往会显得非常单调.非常多时候依据须要定义不同的item 背景选项.比如定义数据 ...
- The Swift Programming Language-官方教程精译Swift(5)集合类型 -- Collection Types
Swift语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对). Swift语言里的数 ...
- Go基础系列:常量和变量
常量(Constants)和iota 常量包含不会发生更改的数据.常量的数据类型只能是boolean.number(int/float/complex)或string. 定义方式: const NAM ...
- Swift 学习- 05 -- 集合类型
// 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...
随机推荐
- Redis命令-HyperLogLog
HyperLogLog数据结构简单介绍 能够看http://www.cnblogs.com/ysuzhaixuefei/p/4052110.html 博客,介绍的相对照较清晰. HyperLogLo ...
- 2017-3-3 leetcod 1 35 448
ACM退役了,接下来是考研的准备,刷刷leetcode保证不会生手,也算是调剂生活,初步计划是每天三题吧,希望可以坚持下去. 打算按照专题来做,先是Array....本来以为特别水,结果.... == ...
- React中多行文本省略不生效原因
在普通的前端项目中,在不考虑兼容问题的时候,可以用以下代码实现: overflow : hidden; text-overflow: ellipsis; display: -webkit-box; - ...
- MSSQL执行大脚本文件时,提示“内存不足”的解决办法
导出了一个脚本文件,将近900M,回来往sql studio一丢,报了个内存不足,然后就有了此文.. 问题描述: 当客户服务器不允许直接备份时,往往通过导出数据库脚本的方式来部署-还原数据库, 但是当 ...
- Tomcat 初探(一) 简介
简述 大部分入了 Java 开发这个坑的朋友,都需要把自己的网站发布到 Web 服务器上,相信也听过 Tomcat 的鼎鼎大名.Tomcat 是由 Sun 公司软件架构师詹姆斯·邓肯·戴维森开发的 W ...
- Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...
- 关于TCP的三次握手和四次分手 专题
客户端TCP状态迁移:CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSE ...
- js前台编码,asp.net后台解码 防止前台传值到后台为乱码
js编码: encodeURI() 后台解码:HttpUtility.UrlDecode()
- Linux下编译安装Memcache
需要gcc,make,cmake,autoconf,libtool等工具,联网后,yum install -y gcc,make,cmake,autoconf,libtool 编译安装libevent ...
- 洛谷P3707 [SDOI2017]相关分析(线段树)
题目描述 Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等. Frank不仅喜欢观测,还喜欢分析观测到的数据.他经常分析两个 ...