复制构造函数问题
C++ Primer p408页习题 13.2的第二题 vector<int> v1(42); vector<int> v2=42;
其中第一句是正确的,第二句错误,答案说,首先调用vector的构造函数,参数为整型42,生成一个临时的对象,再调用vector的复制构造函数来构造v2,由于没有公有的复制构造函数,所以无法调用复制构造函数去生成v2.
但如果vector<int> v2=v1;却是正确的,此时不也调用了复制构造函数了吗,为什么vector<int> v2=42;不可以呢?
只是多调用了一次构造函数而已啊。。
[解决办法]
从一个整数直接构造vector的构造函数是explicit的,所以“首先调用vector的构造函数,参数为整型42,生成一个临时的对象”是错误的,编译器不会做从整形到vector的隐式转换。