在 C 中,尝试定义一个具有初始值的公共静态变量,例如 static int j=0;,触发编译错误。这归因于 ISO C 中的基本规则,该规则禁止非常量静态成员变量的类内初始化。
与 C 不同,此类变量是隐式初始化的为零时,C 要求它们保持未初始化状态。这种区别源于引用透明度原则,该原则确保静态成员的值在类的所有实例中保持一致。允许类内初始化可能会损害这一原则,导致变量值不一致。
与非常量成员相比,允许初始化常量静态成员类内,因为它们的值在初始化后无法修改。这意味着这些成员在其整个生命周期中保持一致的值。
禁止类内初始化意味着 C 中的静态变量不会自动初始化为 0,如相反,它们保持未初始化状态,直到在程序中的其他地方显式赋值为止。
要正确初始化 C 中的静态变量,需要在头文件中定义它们并在单独的 .cpp 文件中分配初始值,如下面的代码片段所示:
// Header file class Test { public: static int j; }; // .cpp file // Initialize static variables int Test::j = 0;
通过遵循这种方法,您可以确保静态变量在所有类实例中正确且一致地初始化。
以上是为什么无法在 C 类中初始化非常量静态成员变量?的详细内容。更多信息请关注PHP中文网其他相关文章!