如何在c++中初始化静态属性
How to initialize static attribute in c++?
我读到构造函数只能实例化非静态属性。我已经写了一个小代码来检查这一点,现在我想知道,因为编译器没有显示任何错误???那么我可以在构造函数中初始化静态属性和非静态属性吗?这是我的密码!非常感谢!
class NixIs {
int var;
static int global;
public:
NixIs(int val = 0)
{
global = val;
}
我想你指的是"字段"而不是"属性"
您的代码是有效的C++,但它不会初始化静态字段global
,因为它是一个实例构造函数。
如果您想用一个微不足道的常数值(在编译时已知)初始化NixIs::global
,您可以在头中内联指定它:
NixIs.h:
class NixIs {
static int global = 0;
}
如果您有一个非常量初始值(例如无参数的自由函数结果),那么静态字段初始值设定项需要在代码文件中(而不是标头)。除了静态字段的类型和初始值之外,还需要指定静态字段:
NixIs.h:
class NixIs {
static int global;
}
NixIs.cpp:
int NixIs::global = nonTrivialValue;
如果你想以特定的顺序或用函数结果值初始化多个静态字段,你需要使用破解,因为C++没有静态构造函数。请参阅此处:c++中的静态构造函数
初始化构造函数中的属性通常使用初始化器列表来完成。例如,您可以初始化类中的非静态属性,如下所示:
NixIs( int init_val) : val(init_val) {
// do stuff
}
我想这就是你的意思。尝试初始化这样的静态类成员将是一个错误。但是,包括构造函数和析构函数在内的所有类方法都可以访问静态成员。在您的示例中,"global"只会被创建的每个新实例覆盖。
NixIs first(1); // first.global is now 1
NixIs second(2); // first.global is now also 2 (same as second.global)
相关文章:
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- "local scope"中的 C++ 初始化静态变量
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 未调用的初始化静态thread_local结构的构造函数和析构函数
- 如何在 C++ 中使用 NULL(或 0)初始化静态字符数组
- 如何从静态类函数初始化静态类对象
- C++:用IIFE线程初始化静态局部变量安全吗
- 如何在 c++ 中初始化静态类对象?
- 使用 lambda 初始化静态数组
- 使用 lambda 函数初始化静态数据成员
- 如何从 std::integer_sequence 初始化静态数组?
- 在构造函数中初始化静态函数指针
- C - 初始化静态成员的方法
- 大括号使用枚举类初始化静态常量unordered_map
- C++ main 函数中初始化静态变量
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 我应该使用类内发起器初始化静态常量数据成员还是在其类外的定义中初始化静态常量数据成员
- 如何在运行时使用静态成员函数初始化静态成员变量
- 与其他静态const成员初始化静态常量成员