2014-12-02 76 views
0

static成员变量在哪个状态下保存值0静态成员变量在哪个状态下保存值“0”?

当我们宣布它?

static int x; 

或者当我们定义它时?

int Simple::x; 
+0

将其分配给0不是必需的。我已经测试过它,它输出0,但我想知道它是否包含0之前。但正如你所说,它包含随机。谢谢。 :) – Vipulcoolrule 2014-12-02 16:01:24

+0

你需要影响它。 'int simple :: x = 0;' – user2346536 2014-12-02 16:01:29

+0

它不应该包含0。我很惊讶我实际上编译没有任何作用。 – user2346536 2014-12-02 16:02:09

回答

2

两者都不合理,因为声明和定义与程序的运行时状态无关。

在程序启动之前,在任何用户代码运行之前,它在静态初始化阶段被初始化为零。

1

编译器在声明时将其初始化为0,除非您为其指定任何其他值。

+0

visual studio 2013有什么这样做?将我们指向标准而不是微软编译器的规范。 – zoska 2014-12-02 16:15:52

+0

起始段落以简短的方式总结了静态关键字。虽然我同意你的反对意见,但这也是它的必要条件,因此我会将网址从答案中删除。 – NSNoob 2014-12-02 16:30:40

1

该对象由定义创建,而不是声明。所以说它是初始化你的对象的定义就不那么错了。但是,你不知道这将发生的确切时间。你只是知道这会在main调用之前发生。这就是为什么我说更少错误而不是更正确。

是的,内置类型的静态数据成员默认为零初始化。

1

如果没有其他初始化,则在创建第一个对象时将所有静态数据初始化为零。