std::is_same 和 std::is_base_of 是用于编译期类型判断的类型特征。1. std::is_same 判断两个类型是否完全相同,对 const、引用等敏感;2. std::is_base_of 判断第一个类型是否为第二个类型的基类或相同类型,支持多级继承且不考虑访问控制;两者常用于模板约束、SFINAE 和类型安全检查。
std::is_same 和 std::is_base_of 是 C++ 标准库中类型特征(type traits)的一部分,定义在头文件 中。它们用于在编译期对类型进行判断,常用于模板元编程、SFINAE 控制、概念约束等场景。
该模板接收两个类型参数,如果这两个类型是同一个类型(考虑引用、const/volatile 修饰),则其成员常量 value 为 true,否则为 false。
#include#include int main() { std::cout << std::is_same ::value << "\n"; // 输出 1 std::cout << std::is_same ::value << "\n"; // 输出 0 std::cout << std::is_same ::value << "\n"; // 输出 0 std::cout << std::is_same ::value << "\n"; // 输出 0 }
注意:顶层 const、引用和类型别名都会影响比较结果。若想忽略这些差异,可配合 std::decay 或 std::remove_cvref 使用。
常见用途包括:
该模板判断第一个类型是否是第二个类型的基类(或相同类型)。即:std::is_base_of 在 Base 是 Derived 的公共基类时为 true,支持多级继承。
#include#include class A {}; class B : public A {}; class C {}; int main() { std::cout << std::is_base_of::value << "\n"; // 输出 1 std::cout << std::is_base_of::value << "\n"; // 输出 1(自身也算) std::cout << std::is_base_of::value << "\n"; // 输出 0 std::cout << std::is_base_of::value << "\n"; // 输出 0 }
注意:私有继承也返回 true,因为类型关系在编译期检查时不考虑访问控制。但一般建议用于公共继承体系。
典型应用场景:
结合两者可以构建更复杂的类型约束逻辑。例如,写一个只接受某种基类派生类的函数模板:
#include#include class Animal { public: virtual void speak() = 0; }; class Dog : public Animal { public: void speak() override { std::cout << "Woof!\n"; } }; template void make_animal_sound(T& animal) { static_assert(std::is_base_of::value, "T must derive from Animal"); animal.speak(); }
这样能防止传入非 Animal 派生类的对象,提升模板安全性。
基本上就这些。合理使用类型萃取能让模板代码更健壮、意图更清晰。
# ai
# c++
# ios
# stream
# 标准库
# speak
# 常量
# const
# volatile
# 指针
# 继承
# 私有继承
# 接口
# 函数模板
# 对象
# 第一个
# 第二个
# 完全相同
# 访问控制
# 派生类
# 这两个
# 能让
# 也算
# 则为
# 安全检查
相关文章:
常州企业建站如何选择最佳模板?
网站网页制作专业公司,怎样制作自己的网页?
如何通过虚拟主机快速搭建个人网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
名字制作网站免费,所有小说网站的名字?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
定制建站策划方案_专业建站与网站建设方案一站式指南
专业网站建设制作报价,网页设计制作要考什么证?
如何快速搭建响应式可视化网站?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何用y主机助手快速搭建网站?
建站之星在线客服如何快速接入解答?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
建站之星好吗?新手能否轻松上手建站?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
c# 在高并发场景下,委托和接口调用的性能对比
智能起名网站制作软件有哪些,制作logo的软件?
深圳网站制作案例,网页的相关名词有哪些?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
建站主机选择指南:服务器配置与SEO优化实战技巧
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
中山网站推广排名,中山信息港登录入口?
孙琪峥织梦建站教程如何优化数据库安全?
外贸公司网站制作哪家好,maersk船公司官网?
公司门户网站制作流程,华为官网怎么做?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何高效搭建专业期货交易平台网站?
招贴海报怎么做,什么是海报招贴?
已有域名能否直接搭建网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何在宝塔面板创建新站点?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何快速搭建FTP站点实现文件共享?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
php json中文编码为null的解决办法
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
建站之星备案流程有哪些注意事项?
如何快速搭建虚拟主机网站?新手必看指南
建站主机服务器选型指南与性能优化方案解析
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
制作门户网站的参考文献在哪,小说网站怎么建立?
大型企业网站制作流程,做网站需要注册公司吗?
安云自助建站系统如何快速提升SEO排名?
*请认真填写需求信息,我们会在24小时内与您取得联系。