首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

仍是默认构造函数

2013-09-06 
还是默认构造函数。默认构造函数是未提供显式初始化时,用来创建对象的构造函数。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还有右值拷贝。越来越复杂。不如不去想。好好的填上初始化参数。

热点排行