如何在C++中声明零初始化的类成员
How to declare a zero initialized class member in C++?
我的.hpp
文件中有以下类:
class user {
public:
user(std::string username);
static const user empty;
private:
std::string username;
std::uint32_t points;
std::uint32_t level;
};
根据 cpp首选项,对象可以用 static T object;
初始化为零。但是,如果这是在类中完成的,这是否意味着我上面声明的empty
用户每次包含时都会有所不同?我希望empty
用户在所有文件中共享相同。
我正在考虑做extern static const user empty;
但我不确定如何在.cpp
文件中实际定义它。
如果您所说的"在类中">但是,如果这是在一个类中完成的,那是否意味着我上面声明的空用户每次包含时都会有所不同?
是指在类定义中,那么问题不在于">每次都不同">,而是违反了一个定义规则。静态成员始终只有一个实例,并且必须有一个定义。
我在考虑做
extern static const user empty;
没有必要。您可以继续使用静态成员。
但我不确定如何在.cpp文件中实际定义它。
源文件确实正是必须定义变量的位置。变量定义具有以下形式:
type_name variable_name(constructor_arguments);
因此,对于静态成员:
const user user::empty("empty");
或者,如果您选择改用全局:
const user empty("empty");
相关文章:
- 为什么在C++中首先初始化成员类
- 是否可以防止省略聚合初始化成员?
- 正在复制具有未初始化成员的结构
- 使用大括号或括号初始化成员变量
- C++结构:强制初始化成员?
- C++中未初始化成员布尔变量的默认值是多少?
- 使用默认值初始化成员引用
- 在构造函数中初始化成员时,是否应该在成员上使用 std::move?
- C++使用 { } 初始化成员变量
- 如何根据构造函数参数使用超类类型初始化成员变量?
- OpenGL C++:VBO 的结构包装器不会初始化成员
- 有没有办法在Brace中初始化成员
- 从现有 istream 或类本身创建的 istream 初始化成员 istream
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 通常应用方法,使用带有构造函数委托的 SFINAE 通过类模板的构造函数初始化成员
- 如何在嵌套类中初始化成员?C
- 是否可以在构造函数主体中初始化成员变量,而不是初始值设定项列表
- 编译器错误,因为构造函数必须显式初始化成员
- 如何使用成员函数初始化成员函数指针
- C 如何使用隐藏的默认构造函数初始化成员