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;
}
相关推荐
2501_941111405 分钟前
C++中的状态模式实战
开发语言·c++·算法
鑫—萍1 小时前
C/C++精品算法——双指针(1)
c语言·c++·算法
2501_941111891 小时前
低延迟系统C++优化
开发语言·c++·算法
2501_941111992 小时前
C++中的装饰器模式变体
开发语言·c++·算法
怕什么真理无穷3 小时前
C++_面试15_零拷贝
c++·面试·职场和发展
AA陈超3 小时前
ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
c++·笔记·学习·ue5·虚幻引擎
大袁同学3 小时前
【哈希hash】:程序的“魔法索引”,实现数据瞬移
数据结构·c++·算法·哈希算法·散列表
沐怡旸3 小时前
【穿越Effective C++】条款21:必须返回对象时,别妄想返回其reference——对象返回的语义与效率平衡
c++·面试
2501_941112613 小时前
C++与Docker集成开发
开发语言·c++·算法
智者知已应修善业4 小时前
【51单片机:两边向中间流水:即两边先点亮然后熄灭,次边的点亮再熄灭,直到最中间的两个点亮再熄灭,然后重复动作。】2023-3-4
c语言·c++·经验分享·笔记·嵌入式硬件·算法·51单片机