仍是默认构造函数
还是默认构造函数。默认构造函数是未提供显式初始化时,用来创建对象的构造函数。class T{private:enum {R10
还是默认构造函数。
默认构造函数是未提供显式初始化时,用来创建对象的构造函数。
class T
{
private:
enum {R=10];
int p;
char a[R];
...
public:
...
};
像T这个类,假定并没有显式初始化。
编译器会自动提供默认构造函数,默认构造函数并不做任何工作。
默认构造函数并不初始化p和字符串a。
他只是创建一个类对象,就像创建了x,但是并没有给他提供值给他一样。
int x;
也就是说如果像这样声明一个T的对象T tclass;
编译器会创建这个tclass类对象,但是其中的p和char是未知的。
这样理解对不对啊? 类 对象
[解决办法]你的理解是正确的。
其实这里面有些隐含问题。不过为了避免风险,是必须要手动初始化的。
比如在堆栈定义一个class实例,和在heap上new一个,行为往往是不同的。为了,避免歧义要手动初始化。
构造函数的讲究比较多,挺烦人的。这里还存在着vtable的填写,copy的效率,初始化循序。不同的编译器对这东西有不同的读解。
我的观点是,不要挑战编译器。c++规范定义的,老老实实做,没定义的就不要碰。
什么堆栈啊,静态啊,会自动清0.我怎么知道别人会怎么用我写的类?这都是坑爹的玩意。
c++11还有右值拷贝。越来越复杂。不如不去想。好好的填上初始化参数。