是否有类似Java初始化C ++的构造?

时间:2012-05-09 16:35:10

标签: java c++

我在一些文章中读到了java中有一些叫做初始化块的东西;我们可以在加载类或创建实例时执行一些初始化赋值。

  

除了方法和构造函数之外,初始化块是Java程序中可以执行操作的第三个位置。

class InitDemo
{
     static int y;
     int x;
 {
   y = 10;
   x =  0;
 }
}

我在问C ++中是否存在这样的范例? 谢谢。

2 个答案:

答案 0 :(得分:4)

需要指出的是,Java中有两种不同形式的初始化块。没有关键字{...}的裸static块只是编译器调整的一部分 - 块中的文本被附加到任何定义的构造函数的前面 - 没有单独的代码段是产生。另一方面,以static {...开始的块是一个静态初始化块和一个(半)正确的过程(命名,毫不奇怪,“静态”)。

static块仅在加载类后立即执行一次(有一些警告)。每次执行构造函数时,非静态初始化程序(由于被复制到构造函数中)都会执行,因此通常不适合静态初始化。

答案 1 :(得分:2)

简而言之,C ++没有这个Java构造的直接等价物。

要获得类似的行为,您必须在x的构造函数中设置yInitDemo(您也可以在Java中执行此操作)。