例如在下面的代码:编译器何时在C++中创建复制构造函数?
class HowMany {
static int objectCount;
public:
HowMany() {
objectCount++;
}
static void print(const string& msg = "") {
if(msg.size() != 0)
cout << msg << ": ";
cout << "objectCount = " << objectCount << endl;
}
~HowMany() {
objectCount--;
print("~HowMany()");
}
};
int HowMany::objectCount = 0;
// Pass and return BY VALUE:
HowMany f(HowMany x) {
x.print("x argument inside f()");
return x;
}
int main() {
HowMany h;
HowMany::print("after construction of h");
HowMany h2 = f(h);
HowMany::print("after call to f()");
}
为什么编译器不会自动为类的howmany创建拷贝构造函数,逐位拷贝发生时调用至f(h)发生地方?
在什么情况下,编译器创建默认的复制构造函数,以及在什么情况下它不创建?
它给输出为:
施工小时后:objectCount = 1
X内˚F()的参数:objectCount = 1周
〜的howmany():objectCount = 0
呼叫f()后:objectCount = 0
〜HowMany():objectCount = -1
〜的howmany():objectCount = -2
许多许多由于事先
你怎么知道itd不会创建? (顺便说一句,你的头衔说“有”,你的问题说“不”),首先解决。) – Nawaz
检查它的输出。我问,什么时候它自动创建,什么时候不创建。 – Luv
输出在哪里?你希望我们编译并执行你的代码来查看输出结果吗?然后回答它? – Nawaz