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;
}
相关推荐
清朝牢弟11 小时前
Ubuntu系统VScode实现opencv(c++)图像像素类型转换和归一化
c++·opencv·ubuntu
黑色的山岗在沉睡11 小时前
P1948 [USACO08JAN] Telephone Lines S
数据结构·c++·算法·图论
玖剹13 小时前
Linux文件操作:从C接口到系统调用
linux·服务器·c语言·c++·笔记·ubuntu
ikkkkkkkl14 小时前
LeetCode:15.三数之和&&18.四数之和
c++·算法·leetcode
pusue_the_sun14 小时前
从零开始搞定类与对象(中)
开发语言·c++·学习
屁股割了还要学14 小时前
【数据结构入门】链表
c语言·开发语言·数据结构·c++·学习·算法·链表
君鼎15 小时前
Effective C++ 条款19: 设计class犹如设计type
c++
源代码•宸15 小时前
C++高频知识点(十四)
开发语言·c++·经验分享·raii
易ლ拉罐17 小时前
【C++】封装,this指针
c++
独好紫罗兰17 小时前
C++信息学奥赛一本通-第一部分-基础一-第一章
c++·算法