explicit关键字的作用
explicit关键字
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数只能显式调用, 而不能充当转换构造函数(当构造函数只有一个参数或其他参数都有缺省值时)。 跟它相对应的另一个关键字是implicit,。类构造函数默认情况下即声明为implicit。
为何尽量对单参数构造函数使用explicit?
class A{ public: A(int x){ cout<<"我被用了"<<endl; } }; void func(A a){} int main( ){ func(1);// 被隐式转换为func(A(1)) ,本来是1却被自动调用了A(1)这就是拷贝初始化 //输出:"我被调用了" return 0; }
而实际上,func(1)可能只是操作失误。
什么时候下,构造函数可以充当转换构造函数?
- 当构造函数只有一个参数且没有
explict
关键字修饰时。- 当构造函数有多个参数且除第一个参数外其他参数都有默认值(第一个参数也可以有)时。
本文链接:
/archives/explicit
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
后端技术分享!
喜欢就支持一下吧