如何在C++中声明零初始化的类成员

How to declare a zero initialized class member in C++?

本文关键字:初始化 成员 声明 C++      更新时间:2023-10-16

我的.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");