C++11——多个参数的显式构造函数

直接上两段小代码,对比着看就明白了。

class P
{
public:
	P(int a, int b) { cout << "P(int a, int b)" << endl; }
	
	explicit P(int a, int b, int c) { cout << "explicit P(int a, int b,int c)" << endl; }
};
void fp(const P&) {}
int main()
{

	
	P p4 = { 77,55 };//ok P(int a, int b)
	P p5 = { 55,66,77 };//error
	P p6(55, 66, 77);//ok explicit P(int a, int b, int c)
	P p7({ 55,66,77 });//error
	fp({ 55,66});//ok P(int a, int b)
	fp({ 55,66,77 });//error
	
	system("pause");
	return 0;
}

再加个使用initializer_list做形参的构造函数,则下面所有都可以正确执行,不会报错:

class P
{
public:
	P(int a, int b) { cout << "P(int a, int b)" << endl; }
	P(initializer_list<int>) { cout << "P(initializer_list<int>)" << endl; }
	explicit P(int a, int b, int c) { cout << "explicit P(int a, int b,int c)" << endl; }
};
void fp(const P&) {}
int main()
{

	P p4 = { 77,55 };//initializer_list
	P p5 = { 55,66,77 };//initializer_list
	P p6(55, 66, 77); //explicit P(int a, int b, int c)
	P p7({ 55,66,77 });//initializer_list
	fp({ 55,66,77 });//initializer_list
	vector<int>v1{ 1,2,3,4,5 };//initializer_list
	vector<int>v2={ 1,2,3,4,5 };//initializer_list
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/107481360