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关键字修饰时。
  • 当构造函数有多个参数且除第一个参数外其他参数都有默认值(第一个参数也可以有)时。
文章作者: 极简
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 后端技术分享
C/C++
喜欢就支持一下吧