C++: explicit的用法

C++的关键字explicit用来阻止某种类型到构造函数隐式类型转换,但是仍然可以使用显示类型转换实现某种类型到构造函数的类型转换。

话不多说,看例子:

class B {
public:
	B(int x = 0){
		cout << "construction!" << endl;
	}
};
void Test(B b) {};
int main()
{
	B b1(25);
	Test(25);
}

首先定义了一个类B,其构造函数没有添加关键字explicit,然后我们定义一个函数Test(),用来实现int到类B的隐式类型转换。代码直接运行出现结果:
在这里插入图片描述
第二次打印是由于Test()函数实现了int到类B的隐式类型转换,所以也调用了构造函数。

而当我们在类的构造函数前面添加explicit关键字后,c++编译器会直接提示不存在从"int" 转换到 "B"的适当构造函数,正确调用是使用显示类型转换

class B {
public:
	explicit B(int x = 0){
		cout << "construction!" << endl;
	}
};
void Test(B b) {};
int main()
{
	B b1(25);
	Test(B(25)); //显示类型转换
	//Test(25); 不存在从"int" 转换到 "B"的适当构造函数
}
原创文章 9 获赞 3 访问量 514

猜你喜欢

转载自blog.csdn.net/qq_36242312/article/details/104989899
今日推荐