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)是无序无重 ...
随机推荐
- [C#] 怎样分析stackoverflow等clr错误
有时候由于无限递归调用等代码错误,w3wp.exe会报错退出.原因是clr.exe出错了. 这样的错误比較难分析,由于C#代码抓不住StackOverflowException等异常. 处理方法是:生 ...
- 又一次发现Oracle太美之glogin.sql
又一次发现Oracle太美之glogin.sql 刚開始接触Oracle的时候,有时候一登陆一个生产环境.常常会出现以下的情况: [oracle@rh64 app]$ sqlplus / as sys ...
- Hibernate Tools-代码生成
建立好数据库后,点击一个键,代码就生成了,这实在是份十分满意的事情.前面有介绍Hibernate Tools就能够生成代码,那么我们怎么利用它来生成代码呢. 以下就把具体步骤贴出来,相同,有图有真相. ...
- [C++设计模式] strategy 策略模式
依照陈硕老师的观点.c++里有面向过程编程.面向对象编程,基于对象编程(面向接口编程)和泛型编程.四种思路都各有其适用场景. 面向过程编程是沿袭C的结构化编程思路,OOP是C++的核心,也是现代高级编 ...
- tensorflow利用预训练模型进行目标检测(二):预训练模型的使用
一.运行样例 官网链接:https://github.com/tensorflow/models/blob/master/research/object_detection/object_detect ...
- 从git源码安装zabbix-agent
从网上随便找了几个image,都是从svn下载的代码,根本跑不了,于是自己重新做了个,从git上拿的源码,只是build出来的image有点大,有时间再优化了 Dockerfile FROM cent ...
- ubuntu下谷歌浏览器字体模糊解决方案
一般来说,这种问题应该是缺少字体造成的,因此重新安装字体就可以解决问题. 1.双系统下,查找Windows C盘下:Windows/font/???? ???可在3中查找相应字体 2.分别双击安装那两 ...
- css盒模型:BFC、IFC边距重叠解决方案
BFC:块级格式化上下文 IFC:行内格式化上下文 实例如下: <div class="out" style="background: red;"> ...
- CSS3渐变知识的介绍
渐变是CSS3当中比较丰富多彩的一个特性,通过渐变我们可以实现许多炫丽的效果,有效的减少图片的使用数量,并且具有很强的适应性和可扩展性. 可分为线性渐变.径向渐变 1 线性渐变 linear-g ...
- Java对象、Json、Xml转换工具Jackson使用
在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...