我有以下代码[这是一个面试问题]:C++默认情况下,复制和推广的构造
#include <iostream>
#include <vector>
using namespace std;
class A{
public:
A(){
cout << endl << "base default";
}
A(const A& a){
cout << endl << "base copy ctor";
}
A(int) {
cout << endl << "base promotion ctor";
}
};
class B : public A{
public:
B(){
cout << endl << "derived default";
}
B(const B& b){
cout << endl << "derived copy ctor";
}
B(int) {
cout << endl << "derived promotion ctor";
}
};
int main(){
vector<A> cont;
cont.push_back(A(1));
cont.push_back(B(1));
cont.push_back(A(2));
return 0;
}
输出是:
base promotion ctor
base copy ctor
base default
derived promotion ctor
base copy ctor
base copy ctor
base promotion ctor
base copy ctor
base copy ctor
base copy ctor
我无法理解这种输出,特别是为什么基本默认被调用一次,最后3个拷贝ctor。有人可以解释这个输出吗?
谢谢。
请回复评论或提出新问题。这是一个新问题,不是吗? –
是的,编辑是一个单独的问题;我曾尝试保留()。 – Jake
他们的确切顺序 - http://ideone.com/TUEGo –