我正在寻找一种方法,使用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;
}
如何正确实施?谢谢你的任何建议。
答案 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关键字。 并且应该是不可或缺的。