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

时间:2018-03-16 14:35:59

标签: 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;
};

According to cppreference,对象可以使用static T object;初始化为零。但是,如果这是在一个类中完成的,那么这意味着我在上面声明的empty用户每次被包含时会有所不同吗?我希望empty用户在所有文件中共享。

我在考虑做extern static const user empty;,但我不确定如何在.cpp文件中实际定义它。

1 个答案:

答案 0 :(得分:2)

  

但是,如果这是在一个类中完成的,那么这并不意味着我在上面声明的空用户每次被包含时会有所不同吗?

如果"在课程" 中你的意思是在课程定义中,那么问题不在于&#34 ; 每次",因为它违反了一个定义规则。始终只有一个静态成员实例,并且必须有一个定义。

  

我在考虑做extern static const user empty;

没有必要。您可以继续使用静态成员。

  

但我不确定如何在.cpp文件中实际定义它。

源文件确实是必须定义变量的地方。变量定义具有以下形式:

type_name variable_name(constructor_arguments);

因此,对于静态成员:

const user user::empty("empty");

或者,如果您选择使用全局代码:

const user empty("empty");