https://stackoverflow.com/a/8839647/462608
使用静态初始化器:
public class MyClass { static { //init } }
可以在 C++ 中完成类似的操作吗?
实际上,我需要初始化一些变量,但我不想创建一个对象。
https://stackoverflow.com/a/8839647/462608
使用静态初始化器:
public class MyClass { static { //init } }
可以在 C++ 中完成类似的操作吗?
实际上,我需要初始化一些变量,但我不想创建一个对象。
如果变量是static
成员,您不仅可以初始化它们,而且还必须初始化它们。
Java 初始化器列表没有直接等价物,但可以通过调用函数来初始化静态成员来完成类似的操作:
class X
{
static bool x;
}
bool foo()
{
//initialization code here
}
bool X::x = foo();
这适用于具有强烈逻辑的情况。如果您只想初始化static
成员,只需执行类似于X::x
.
实际上,我需要初始化一些变量,但我不想创建一个对象。
如果变量在类之外,直接初始化它们(不需要为此调用代码)。
如果变量是static
类的成员,请使用上述方法之一。
如果变量是非static
成员,那么没有对象它们就根本不存在。
类的静态变量在 .cpp 文件中初始化:
我的类.h
class MyClass {
public:
static void f1();
static void f2();
private:
static int a1;
static int a2;
static int a3;
};
我的类.cpp
int MyClass::a1 = 7;
int MyClass::a2 = 8;
int MyClass::a3 = MyClass::a1 + MyClass::a2;
void MyClass::f1()
{
a1 = 7;
}
void MyClass::f2()
{
cout << a2 << endl;
}
如果您想要静态成员变量的非平凡初始化 - 使用构造函数将它们分组在内部类中:
我的类.h
class MyClass {
public:
static void f1();
static void f2();
private:
struct Data {
Data();
int a1;
int a2;
int a3;
};
static Data data;
};
我的类.cpp
MyClass::Data MyClass::data;
MyClass::Data::Data() : a1(0), a2(0), a3(0)
{
// it is just an example ;)
for (int i = 0; i < 7; ++i)
{
a1 += 2;
s2 += 3;
a3 += a1 + a2;
}
}
void MyClass::f1()
{
data.a1 = 7;
}
void MyClass::f2()
{
cout << data.a2 << endl;
}