当前位置: 首页 > news >正文

C++标准模板(STL)- 类型支持 (类型关系,检查两个类型是否相同,std::is_same)

类型特性


类型特性
类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。

试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。

定义于<type_traits>头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。

类型关系

继承自 std::integral_constant

成员常量

value

[静态]

TU 是同一类型则为 true ,否则为 false
(公开静态成员常量)

成员函数

operator bool

转换对象为 bool ,返回 value
(公开成员函数)

operator()

(C++14)

返回 value
(公开成员函数)

成员类型

类型定义
value_typebool
typestd::integral_constant<bool, value>

检查两个类型是否相同

std::is_same

template< class T, class U >
struct is_same;

(C++11 起)

TU 指名同一类型(考虑 const/volatile 限定),则提供等于 true 的成员常量 value 。否则 value 为 false 。

满足交换律,即对于任何二个类型 TU , is_same<T, U>::value == true 当且仅当 is_same<U, T>::value == true 。

辅助变量模板

template< class T, class U >
inline constexpr bool is_same_v = is_same<T, U>::value;

(C++17 起)

可能的实现

template<class T, class U>
struct is_same : std::false_type {};template<class T>
struct is_same<T, T> : std::true_type {};

调用示例

#include <iostream>
#include <type_traits>
#include <cstdint>class A
{
public:A() {}
};class B : public A
{
public:B() {}
};int main()
{std::cout << std::boolalpha;// 一些实现定义状况std::cout << "std::is_same<int, std::int32_t>::value:   "<< std::is_same<int, std::int32_t>::value << std::endl;// 若 'int' 为 32 位则通常为 truestd::cout << "std::is_same<int, std::int64_t>::value:   "<< std::is_same<int, std::int64_t>::value << std::endl;// 若使用 ILP64 数据模型则可能为 truestd::cout << "-----------------------------------------------" << std::endl;// 'float' 决非整数类型std::cout << "std::is_same<float, std::int32_t>::value: "<< std::is_same<float, std::int32_t>::value << std::endl; // falsestd::cout << "-----------------------------------------------" << std::endl;// 'int' 为隐式的 'signed'std::cout << "std::is_same<int, int>::value:            "<< std::is_same<int, int>::value << std::endl;        // truestd::cout << "std::is_same<int, unsigned int>::value:   "<< std::is_same<int, unsigned int>::value << std::endl; // falsestd::cout << "std::is_same<int, signed int>::value:     "<< std::is_same<int, signed int>::value << std::endl; // truestd::cout << "-----------------------------------------------" << std::endl;// 不同于其他类型, 'char' 既非 'unsigned' 亦非 'signed'std::cout << "std::is_same<char, char>::value:          "<< std::is_same<char, char>::value << std::endl;        // truestd::cout << "std::is_same<char, unsigned char>::value: "<< std::is_same<char, unsigned char>::value << std::endl; // falsestd::cout << "std::is_same<char, signed char>::value:   "<< std::is_same<char, signed char>::value << std::endl; // falsestd::cout << "-----------------------------------------------" << std::endl;std::cout << "std::is_same<A, A>::value:                "<< std::is_same<A, A>::value << std::endl; // falsestd::cout << "std::is_same<A, B>::value:                "<< std::is_same<A, B>::value << std::endl; // falsestd::cout << "std::is_same<A(), B()>::value:            "<< std::is_same<A(), B()>::value << std::endl; // falsereturn 0;
}

输出

相关文章:

  • nacos集群部署
  • 二叉树递归遍历
  • 关于Flume-Kafka-Flume的模式进行数据采集操作
  • git安装后报git: ‘remote-https‘ is not a git command. See ‘git --help‘.
  • Portraiture2024PS/LR专用智能磨皮插件,AI算法美颜,提高P图效率
  • 2.3 调用智谱 API
  • 【数据分享】2023年我国省市县三级的专精特新“小巨人”企业数量(Excel/Shp格式)
  • C#中.NET 6.0 控制台应用通过EF访问新建数据库
  • 竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python
  • 云原生微服务架构图
  • 计算属性与watch的区别,fetch与axios在vue中的异步请求,单文本组件使用,使用vite创建vue项目,组件的使用方法
  • openGauss通过VIP实现的故障转移
  • 汽车 CAN\CANFD数据记录仪
  • 情报收集工具的编写
  • 无需添加udid,ios企业证书的自助生成方法
  • [PHP内核探索]PHP中的哈希表
  • Angular 响应式表单之下拉框
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • laravel with 查询列表限制条数
  • Linux CTF 逆向入门
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • webpack入门学习手记(二)
  • 大主子表关联的性能优化方法
  • 前端_面试
  • 浅谈Golang中select的用法
  • 我感觉这是史上最牛的防sql注入方法类
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • (1)Android开发优化---------UI优化
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (js)循环条件满足时终止循环
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (三分钟)速览传统边缘检测算子
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .Net中的设计模式——Factory Method模式
  • @staticmethod和@classmethod的作用与区别
  • @Transactional类内部访问失效原因详解
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [Android 数据通信] android cmwap接入点
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Android]常见的数据传递方式
  • [C++] new和delete
  • [CentOs7]iptables防火墙安装与设置
  • [CSS] 点击事件触发的动画
  • [Deep Learning] 神经网络基础
  • [hive小技巧]同一份数据多种处理
  • [LeetCode] Minimum Path Sum
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作
  • [office] excel如何计算毛重和皮重的时间间隔 excel计算毛重和皮重时间间隔方法 #笔记#学习方法