//推断左值右值引用
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的更多相关文章

  1. WebKit Web Inspector增加覆盖率分析和类型推断功能

    WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视 ...

  2. swift学习笔记1——基础部分

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  3. C++ new和delete具体操作符是怎样的

    在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数.如下所示: int *p = (int*) malloc( sizeof(int) * 10 ); //分配10个i ...

  4. Studying-Swift :Day01

    学习地址:http://www.rm5u.com/    或    http://www.runoob.com/ 如果创建的是 OS X playground 需要引入 Cocoa;  如果我们想创建 ...

  5. C++学习3

    C++仍然在使用C语言的 char.int.long 等基本数据类型,它们在现代操作系统(Windows XP.Win7.Win10 等)中的长度如下表所示: longlong是C99新增的一种数据类 ...

  6. android样式布局---&gt;ListView(附上源代码)

    在android应用开发过程中,Listview 是经常使用的数据展现控件,往往用于显示列表形式的数据. 假设只显示数据往往会显得非常单调.非常多时候依据须要定义不同的item 背景选项.比如定义数据 ...

  7. The Swift Programming Language-官方教程精译Swift(5)集合类型 -- Collection Types

    Swift语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对).   Swift语言里的数 ...

  8. Go基础系列:常量和变量

    常量(Constants)和iota 常量包含不会发生更改的数据.常量的数据类型只能是boolean.number(int/float/complex)或string. 定义方式: const NAM ...

  9. Swift 学习- 05 -- 集合类型

    // 集合类型 // swift 提供 Arrays , Sets 和 Dictionaries 三种基本的集合类型用来存储数据 , 数组(Arrays) 是有序数据的集, 集合(Sets)是无序无重 ...

随机推荐

  1. HDU 4912 lca贪心

    Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  2. BZOJ1492:[NOI2007]货币兑换 (CDQ分治+斜率优化DP | splay动态维护凸包)

    BZOJ1492:[NOI2007]货币兑换 题目传送门 [问题描述] 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和B纪念券(以下简称B券).每个持有金券的 ...

  3. php后期静态绑定

    php后期静态绑定 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类. 虽然也可以调用非静态方法,但是不会在运行时绑定. static 不再只是简 ...

  4. Caffe C++API 提取任意一张图片的特征系列二----MemoryData

    介绍一种更加灵活的方法,用MemoryData层输入数据,可以直接用opencv接口读入我们的图片再添加的网络中.  第一个问题:仍然是工程建立问题,提示卷积层或其他层没有注册,解决方法与上一篇博客一 ...

  5. DB-MySQL:MySQL GROUP BY

    ylbtech-DB-MySQL:MySQL GROUP BY 1.返回顶部 1. MySQL GROUP BY 语句 GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使 ...

  6. 压力测试工具 Tinyget

    Tinyget 压力测试工具使用方法为:命令行切换到工具所在路径下,然后输入压力命令.如:tinyget -srv:localhost -uri:/FeaturedProdu1cts.aspx -th ...

  7. 通过修改路由,或者增加Route属性来控制访问webApi的路径

    可以通过RouteConfig.cs文件中的路由规则来控制 通过为每个方法增加单独的[Route(“api/xx类/xx方法”)]

  8. 2018年江西理工大学C语言程序设计竞赛高级组部分题解

    B Interesting paths 考察范围:组合数学 此题是机器人走方格的变种,n*m的网格,从(1,1)走到(n,m),首先可以明确,水平要走m-1格,竖直要走n-1格,则走到目的地的任意一条 ...

  9. php语法学习:轻松看懂PHP语言

    基础语法 开头结尾 PHP脚本以 "<?php " 开头以 "?>" 结尾 <!DOCTYPE html> <html>&l ...

  10. javaScript注释 to 颜文字

    将javascript 注释(alert.console)转化为 颜文字语言. http://utf-8.jp/public/aaencode.html