静态成员变量初始化c ++

时间:2012-03-16 21:25:01

标签: c++ static

  1. 当我没有将值初始化为静态成员变量时,为什么编译器会给我一个错误?它不应该被初始化为0吗?
  2. 为什么我必须在课堂外初始化成员变量? (这是非法的,因为如果你这样做,并在main函数中更改这个静态成员变量的值,你创建了这个clas的对象,它会将静态mamber变量重新赋值给旧值)而const static成员变量在类中是合法的(这是可能的,因为你不能改变这个静态成员变量的值)?
  3. 错误:对class_name :: a

    的未定义引用

2 个答案:

答案 0 :(得分:5)

从发布的错误中,链接器声明该变量尚未已定义,而不是未明确已初始化

class A
{
    // declaration.
    static int x;
};

// definition (in this case without explicit initialisation).
int A::x;

链接器不应发出错误,并且编译器不应发出警告,只要在为static变量分配初始值之前没有尝试使用{{1}}变量。

答案 1 :(得分:0)

静态成员实际上并不存储在任何创建的对象中,因为它在该类的所有对象之间共享。

它应该只创建一次,即使你创建了该类的许多对象。或者即使您创建了类的 no 对象。因此,您必须单独进行。

编译器警告所有类型的非正规化变量,而不仅仅是静态变量。拥有一个没有值的变量通常不是很有用,所以这些警告是好的。添加= 0并不太难,是吗?