//推断左值右值引用
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. spark中的广播变量broadcast

    Spark中的Broadcast处理 首先先来看一看broadcast的使用代码: val values = List[Int](1,2,3) val broadcastValues = sparkC ...

  2. 英语发音规则---B字母

    英语发音规则---B字母 一.总结 一句话总结: 1.B发[b]音? bike [baɪk] n. 自行车 bus [bʌs] n. 公共汽车 bag [bæg] n. 袋:猎获物 baby ['be ...

  3. 【转】用CocoaPods做iOS程序的依赖管理 -- 不错

    原文网址:http://blog.devtang.com/2014/05/25/use-cocoapod-to-manage-ios-lib-dependency/ 文档更新说明 2012-12-02 ...

  4. POJ 1128 Frame Stacking 拓扑排序+暴搜

    这道题输出特别坑.... 题目的意思也不太好理解.. 就解释一下输出吧.. 它让你 从下往上输出. 如果有多种情况,按照字典序从小往大输出... 就是这个多种情况是怎么产生的呢. 下面给一组样例. 很 ...

  5. surface 更新提示

  6. 数据库SQL语句错误

      Caused by: android.database.sqlite.SQLiteException: near "where": syntax error(Sqlite co ...

  7. DB2查看表空间和增加表空间容量

    Db2 connect to xxx Db2 “LIST TABLESPACES SHOW DETAIL” Tablespace ID = 7 Name = TSASNAA Type = Databa ...

  8. MFC+OpenGL可编程管线

    [github链接] 网上的代码大都是固定管线渲染的,今天下午整理了下,把setPixelFormat.初始化glew.创建GL 4,2 context等操作封装到一个MFC类OpenGLWidget ...

  9. GridBagLayout使用案例+获取目录下所有的文件+获取创建时间及最后修改时间

    package vvv; import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLay ...

  10. pupload上传插件问题整理

    前些日子公司网站需要开发一个类似与百度文库上传文档的功能,实现文档的批量上传.展示以及继续上传的功能.开发完成后,通过在多版浏览器下的使用,发现了一系列问题,特总结于下,以免来者在这些问题上耗费太多时 ...