explicit关键字 您所在的位置:网站首页 explict函数 explicit关键字

explicit关键字

2023-12-28 14:03| 来源: 网络整理| 查看: 265

关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。

声明为explicit的构造函数不能在隐式转换中使用。

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。 一 是个构造器 二是个默认且隐含的类型转换操作符。

怎么理解?

比如定义类A该函数的构造函数只有一个int型参数(或者除了第一个参数外其余参数都有默认值的多参构造函数),对于

A a = 12;

常量12的数据类型符合构造函数的函数参数类型,所以编译器会自动调用构造函数,创建一个a对象。

但是如果在构造函数前使用关键字 explicit,表明该构造函数是显示构造函数,不允许会发生上述的隐式转换

#include using namespace std; class Test1 { public: Test1(int n) { num = n; }//普通构造函数 private: int num; }; class Test2 { public: explicit Test2(int n) { num = n; }//显示构造函数 private: int num; }; int main() { Test1 t1 = 12;//隐式调用构造函数,构造成功 Test2 t2 = 12;//编译出错,不能隐式调用构造函数 return 0; }

看到转换成 (int)12 为构造函数的参数类型。

看到Test提示的错误:不存在。

参考:https://zhidao.baidu.com/question/430891693.html

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有