请选择 进入手机版 | 继续访问电脑版

[C 语言] C++ explicit关键字的利用 详解

[复制链接]
查看60 | 回复5 | 2021-9-14 08:09:29 | 显示全部楼层 |阅读模式

在C++中,我们偶尔 可以将构造函数用作主动 范例 转换函数。但这种主动 特性并非总是合乎要求的,偶尔 会导致不测 的范例 转换,因此,C++新增了关键字explicit,用于关闭这种主动 特性。即被explicit关键字修饰的类构造函数,不能举行 主动 地隐式范例 转换,只能显式地举行 范例 转换。

注意 :只有一个参数的构造函数,或者构造函数有n个参数,但有n-1个参数提供了默认值,如许 的环境 才能举行 范例 转换。

下面通过一段代码演示详细 应用(无explicit环境 ):

  1. /* 示例代码1 */
  2. class Demo
  3. {
  4. public:
  5. Demo();                /* 构造函数1 */
  6. Demo(double a);             /* 示例代码2 */
  7. Demo(int a,double b);         /* 示例代码3 */
  8. Demo(int a,int b=10,double c=1.6);  /* 示例代码4 */
  9. ~Demo();
  10. void Func(void);
  11. private:
  12. int value1;
  13. int value2;
  14. };
复制代码

上述四种构造函数:

构造函数1没有参数,无法举行 范例 转换!

构造函数2有一个参数,可以举行 范例 转换,如:Demo test; test = 12.2;如许 的调用就相称 于把12.2隐式转换为Demo范例 。

构造函数3有两个参数,且无默认值,故无法利用 范例 转换!

构造函数4有3个参数,此中 两个参数有默认值,故可以举行 隐式转换,如:Demo test;test = 10;  。

下面讲述利用 了关键字explicit的环境 :

  1. /* 示例代码2 */
  2. class Demo
  3. {
  4. public:
  5. Demo();                /* 构造函数1 */
  6. explicit Demo(double a);        /* 示例代码2 */
  7. Demo(int a,double b);         /* 示例代码3 */
  8. ~Demo();
  9. void Func(void);
  10. private:
  11. int value1;
  12. int value2;
  13. };
复制代码

在上述构造函数2中,由于利用 了explicit关键字,则无法举行 隐式转换。即:Demo test;test = 12.2;是无效的!但是我们可以举行 表现 范例 转换,如:

  1. Demo test;
  2. test = Demo(12.2); 或者
  3. test = (Demo)12.2;
复制代码

到此这篇关于C++ explicit关键字的利用 详解的文章就先容 到这了,更多干系 C++ explicit关键字的利用 内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar 没有昵称513 | 2021-9-14 18:21:28 | 显示全部楼层
经典,收藏了!
回复

使用道具 举报

avatar 醉生三世生d | 2021-9-23 08:34:34 | 显示全部楼层
最近压力山大啊!
回复

使用道具 举报

avatar ffycxyw2274436 | 2021-9-27 21:12:29 | 显示全部楼层
收藏了,改天让朋友看看!
回复

使用道具 举报

avatar 温柔老虎 | 2021-9-28 13:08:24 | 显示全部楼层
很给力!
回复

使用道具 举报

avatar 八神霜烈 | 2021-10-13 18:00:29 | 显示全部楼层
怎么我回帖都没人理我呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则