结构中的静态const,使用构造函数

时间:2012-01-26 23:20:32

标签: c++ static constructor struct

我正在寻找一种方法,使用struct的构造函数初始化结构BUT中的静态float。在这个站点中已经有了初始化值的解决方案,但我无法找到明确使用构造函数的解决方案。

这个想法如下:

struct test {
  static const float a;
  int b;
  test(int bb, float a);
};

test::test(int bb, float aa) {
  b=bb;
  a=aa;
}

int main() {
  int bval=2;
  float aval=0.25;
  struct test aaa(bval, aval);
  return 0;
}

如何正确实施?谢谢你的任何建议。

3 个答案:

答案 0 :(得分:1)

外,您无法对其进行初始化
const float test::a = something;

课外(在单个编译单元中)。但是,您可以执行您编写的内容,并将变量设置为您传递的值。

如果您只想在第一次输入构造函数时设置它,您可以(但不应该)执行类似

的操作
test::test(int bb, float aa){
    static float _unused = (test::a = aa);

    b=bb;
}

但是这不会初始化它,它只是为它赋值,并且你仍然必须每次都将变量传递给构造函数,并且不会对它进行任何操作(除非你给它一个默认值或者东西)。这是一个非常糟糕的设计,最好只在类中设置static函数来设置变量。

答案 1 :(得分:0)

静态成员与特定实例无关,因此它们只会被初始化一次。另一方面,构造函数是基于每个实例调用的,因此执行您尝试执行的操作没有意义。

另一方面,你可以为构造函数中的静态成员分配一个新值,正如你上面所做的那样,但是你仍然需要在结构外部初始化静态成员。事先正常的方式。

值得一提的是,其他语言(例如Java)对于这类事情具有静态构造函数的概念 - 但C ++却没有。

那就是说,您可能会发现以下问题很有趣:

static constructors in C++? I need to initialize private static objects

答案 2 :(得分:0)

您无法在构造函数中初始化静态const var。

您应该在声明

初始化
static const float a = 3.1416f;

确保您了解const关键字。 并且应该是不可或缺的。