合成的构造函数对静态数据成员是怎么处理的?
书上讲的是对于每个非static的成员会依次复制,但是看下面的代码,static也复制了啊!!
- C/C++ code
#include <iostream>using namespace std;class CL1{ public : static int ival; int ii; CL1():ii(1){ }};int CL1::ival=3;int main(){ CL1 cl1; cl1.ival=9; cout<<cl1.ival<<endl; CL1 cl2(cl1); cout<<cl2.ival<<endl; return 0;}? 静态成员如果不复制的话,ival应该是默认值3啊,怎么也成了9!!复制了???!
[解决办法]
不是复制,static变量是所有对象共享的
[解决办法]
静态成员是所有实例共享的,所以不存在复制的问题。你在任意一处修改了,另一个实例也是会跟着变化的,和复制构造函数没有任何关系。
暂且理解为全局变量好了,你的cl1.ival = 9和 CL1::ival=9;或者cl2.ival = 9都能修改到同一个变量,起的作用一样,只是表达方式不一样而已。