//推断左值右值引用
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. 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)

    在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...

  2. 调用imagemagick做响应图片

    设计出图后经常需要改下尺寸放在别的项目上使用,每次都是设计手工处理,其实图片服务可以做更多事情,比如借助强大的im,可以通过url控制图片尺寸 var childProcess = require(' ...

  3. webRequest

    chrome.webRequest 描述: 使用 chrome.webRequest API 监控与分析流量,还可以实时地拦截.阻止或修改请求.  可用版本: 从 Chrome 17 开始支持.  权 ...

  4. 1、libgdx简单介绍

    Libgdx 是一个跨平台和可视化的的开发框架.它当前支持Windows.Linux,Mac OS X.Android,IOS和HTML5作为目标平台. Libgdx同意你一次编写代码不经改动部署到多 ...

  5. 基于Linux环境Tomcat-MySQL的server搭建

    在开发日趋激烈的今天.我们可不能再仅仅会编码了.这样搞不好.就成了一辈子的码奴!所以这里简单的分享一下server的搭建,因为Linux的安全性等一切因素让它成为了server平台的首选环境!今天跟大 ...

  6. [C++设计模式]observer 观察者模式

    有这么一种松耦合的需求: 有一些类的对象对类A对象的状态变化非常感兴趣,不会改变类A的对象,也不会被类A的对象改变,想以一种较小的代价观察对类A对象状态变化. 以下的几种方式也能实现上述目的 (1)通 ...

  7. h5-弹出层layer,提示,顶部横条,

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYkAAAI7CAIAAACWVfAJAAAgAElEQVR4nOy9f1ATWb733z3uOA4kIC ...

  8. 给centos重新安装yum的base-repo源

    转自:https://blog.csdn.net/lovemysea/article/details/79552952 如果自己的centos的系统yum源出现问题了,如何才能修复? 方式一:使用国内 ...

  9. 第七章 用户输入和while 循环

    7.1 创建多行字符串的方式: 01 prompt="if you tell me who you are, we can personalize the message you see.& ...

  10. JavaScript中闭包的理解

    1.什么是闭包 我个人理解闭包就是函数中嵌套函数,但是嵌套的那个函数必须是返回值,才构成闭包: <!DOCTYPE html> <html> <head> < ...