c++ true_type与false_type

news/2024/9/23 18:17:47

std::true_type和std::false_type

实际上是类型别名

是两个类型(类模板)

注意区分true_type与false_type与true和false区别

  • true_typefalse_type代表类型

  • true,false代表值

nmsp1::FalseType myfunc1();//返回假这种含义
nmsp1::TrueType myfunc2();//返回真这种含义

自己模拟实现

namespace nmsp1 {template<bool val>struct BoolConstant {using type = BoolConstant<val>;static constexpr bool value = val;};using TrueType = BoolConstant<true>;using FalseType = BoolConstant<false>;template<typename T,bool val>struct AClass{AClass() {cout << "AClass()执行了" << endl;//if(val) {//    T tmpa = 15;//}//else {//    T tmpa = "abc";    //int tmpa = "abc";//}//if constexpr (val) {//    T tmpa = 15;//}//else {//    T tmpa = "abc";    //int tmpa = "abc";//}
AClassEx(BoolConstant<val>());//创建一个临时对象
        }void AClassEx(TrueType) {T tmpa = 15;}void AClassEx(FalseType) {T tmpa = "abc";}//当为ture时只会去编译重载版本的TureType
    };
}nmsp1::AClass<int, true> tmpobj1;
//如果是第一条注释的if语句会报const char[4]无法转换为int
nmsp1::AClass<string, false> tmpobj2;
//如果是第一条注释的if语句会报无法从int转换为string

 

编译器设计时的考量,编译器是能够在编译器时期判断出来执行AClass类模板构造函数的哪个分支的,但从编译出代码这个角度来说,不管是哪个条件分支都会去编译,那么编译false分支就会报错.

if constexpr:属于编译期间if语句,可以解决上面
角度来说,不管是哪个条件分支都会去编译,那么编译false分支就会报错.

if constexpr:属于编译期间if语句,可以解决上面


原文链接:https://blog.csdn.net/m0_51271123/article/details/121780266

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30979.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

2024.5.13

寄:2024.5.13:眼瞎挂 \(130pts\) .

uniapp自定义input清除按钮

uniapp小程序,引入uni-ui库后,观察到其他组件,有的默认有清除按钮,比如: 在写内置组件 input框,查看文档没有此属性,官方示例在这里:https://github.com/dcloudio/hello-uniapp/blob/master/pages/component/input/input.nvue 还需自行复制对应的css,试了下效果不太好…

DataFrame按条件筛选、修改数据:df.loc[]拓展

DataFrame按条件筛选、修改数据:df.loc[]拓展 创建一个DataFrame 先通过字典创建一个学生信息的DataFrame。 import pandas as pdStudent_dict = {姓名:[张三, 李四, 王五, 赵六],性别:[男, 女, 男, 女],年龄:[20, 21, 19, 18],Python成绩:[70, 80, 90, 50],评价:[良好, 良好,…

inno Setup 打包Java exe可执行文件和MySQL数据库,无需额外配置实现一键傻瓜式安装

前言 出现有需要打包 Java 应用和 Mysql数据库成一个安装包给出去的需求,这里我把整个打包的流程整理一下。 环境 JDK17; MySQL 5.7; 流程 Jpackage打包EXE Jpackage是JDK14后加入的一个用于独立打包的工具,能够将应用打包成exe,有了Jpackage就不需要用exe4j这种打包工具,省…

使用python在windows系统操作快捷方式

其实问题是由上一篇文章(https://www.cnblogs.com/anpengapple/p/18179353)的结尾引出来的。不需要了解背景的话,我现在需要做的是,右键打开桌面上的chrome快捷方式的属性,在目标的后面增加一个参数。我不想傻傻地手动添加,想交给程序来处理。首先需要简单来说一下,wind…

spring之AOP(面向切面编程)

什么是AOP? AOP(Aspect Oriented Programming)意为:面向切面编程,体现了横切的思想,意思是在添加某项功能的时候,是以切面插入的方式实现的,对原有的代码不会产生改变。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP在spring中的作用:在不改变…

识别与防御CSRF漏洞

识别与防御CSRF漏洞 CSRF(Cross-Site Request Forgery,跨站请求伪造),通常也被称为“一键攻击”或“会话劫持”,其缩写为CSRF或XSRF,是一种针对网站的恶意利用技术。尽管名字听起来与跨站脚本(XSS)相似,但两者在本质上是截然不同的。XSS主要依赖于用户对站点的信任,而…

Linux查看一个目录下占用磁盘最多的文件或目录

想要找到占用磁盘最多的文件或目录,可以使用du和sort命令: du -h /path/to/directory | sort -rh | head -n 10其中:du -h /path/to/directory 用于计算指定目录下的所有文件和子目录的大小,并以人类可读的格式显示。 sort -rh 用于按磁盘使用情况的大小(逆序)对输出进行…