C++(20):explicit(true/false)

explicit通常用于声明是否运行隐式转换:

cpp 复制代码
struct A
{
    explicit A(int) { }
};

int main()
{
	A a1 = 10;    //编译报错,不运行隐式的通过int构造A
    A a2(10);     //可以显示的构造
    return 0;
}

C++20扩展了explicit,可以通过explicit(false)来禁用,或通过explicit(true)来启用explicit

cpp 复制代码
constexpr bool if_exp = false;
struct A
{
    explicit(if_exp) A(int) { }     //禁用explicit
};

struct B
{
    explicit(!if_exp) B(int) { }    //启用explicit
};

int main()
{
	A a = 10;    //explicit被禁用,所以可以隐式构造
	B b(10);     //explicit被启用,所以只能显示构造
    return 0;
}
相关推荐
半桔39 分钟前
【网络编程】深入 HTTP:从报文交互到服务构建,洞悉核心机制
linux·网络·c++·网络协议·http·交互
hqwest1 小时前
QT肝8天07--连接数据库
开发语言·数据库·c++·qt·sqlite·上位机·qt开发
WaWaJie_Ngen1 小时前
LevOJ P2080 炼金铺 II [矩阵解法]
c++·线性代数·算法·矩阵
姝孟1 小时前
笔记(C++篇)—— Day 12(类的默认成员函数)
c++·笔记·学习
tpoog2 小时前
[C++项目组件]Elasticsearch简单介绍
开发语言·c++·elasticsearch
视睿14 小时前
【C++练习】06.输出100以内的所有素数
开发语言·c++·算法·机器人·无人机
保持低旋律节奏14 小时前
CPP——OJ试题,string、vector、类(题三)初步应用
c++
君生我老15 小时前
C++ string类常用操作
c++
愿天堂没有C++15 小时前
C++——基础
c++
zzzsde15 小时前
【c++】深入理解string类(3):典型OJ题
开发语言·c++