c++ explicit
发布日期:2022-04-04 06:36:17
浏览次数:3
分类:博客文章
本文共 1180 字,大约阅读时间需要 3 分钟。
http://zh.cppreference.com/w/cpp/language/explicit
explicit 指定符
explicit 指定符指定构造函数或转换函数 (C++11 起)不允许或。它仅可出现于在其类中定义的这种函数的 decl-specifier-seq 中。
注意
声明不带有函数指定符 explicit 的拥有单个非默认参数的 (C++11 前)构造函数被称作。
构造函数(除了/)和用户定义转换函数都可以是函数模板; explicit
的含义不变。
示例
struct A{ A(int) { } // 转换构造函数 A(int, int) { } // 转换构造函数 (C++11) operator bool() const { return true; }}; struct B{ explicit B(int) { } explicit B(int, int) { } explicit operator bool() const { return true; }}; int main(){ A a1 = 1; // OK:复制初始化选择 A::A(int) A a2(2); // OK:直接初始化选择 A::A(int) A a3 {4, 5}; // OK:直接列表初始化选择 A::A(int, int) A a4 = {4, 5}; // OK:复制列表初始化选择 A::A(int, int) A a5 = (A)1; // OK:显式转型进行 static_cast if (a1) ; // OK:A::operator bool() bool na1 = a1; // OK:复制初始化选择 A::operator bool() bool na2 = static_cast(a1); // OK:static_cast 进行直接初始化 // B b1 = 1; // 错误:复制初始化不考虑 B::B(int) B b2(2); // OK:直接初始化选择 B::B(int) B b3 {4, 5}; // OK:直接列表初始化选择 B::B(int, int)// B b4 = {4, 5}; // 错误:复制列表初始化不考虑 B::B(int,int) B b5 = (B)1; // OK:显式转型进行 static_cast if (b2) ; // OK:B::operator bool()// bool nb1 = b2; // 错误:复制初始化不考虑 B::operator bool() bool nb2 = static_cast (b2); // OK:static_cast 进行直接初始化}
转载地址:https://www.cnblogs.com/l2017/p/6905470.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月15日 23时24分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用gdb
2019-04-27
linux自旋锁
2019-04-27
Linux设备驱动之mmap设备操作
2019-04-27
Android Camera调用流程
2019-04-27
给ubuntuGedit安装gedit-source-code-browser
2019-04-27
Mtk camera driver
2019-04-27
DEVICE_ATTR的使用
2019-04-27
Class_file&&Android应用调用方法
2019-04-27
中断处理的tasklet(小任务)机制-不过如此
2019-04-27
Input Driver
2019-04-27
mtk pwm&&linux timer
2019-04-27
s5k5e2ya MIPI 摄像头调试
2019-04-27
用Android UEventObserver监听内核event
2019-04-27
Linux中的工作队列
2019-04-27
linux工作队列
2019-04-27
linux input&&uevent使用
2019-04-27
shell中的${},##和%%的使用
2019-04-27
Android aidl在Framework的使用
2019-04-27
Capture images using V4L2 on Linux
2019-04-27
我的2015年
2019-04-27