直接上两段小代码,对比着看就明白了。
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;
}