explicit关键字 | 您所在的位置:网站首页 › explict函数 › explicit关键字 |
关键字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 实验室设备网 版权所有 |