cppreference.com是一个官方页面,可以依赖于那里提供的文档吗?或者我应该只是阅读语言文档,以防我需要100%的确定性?
查看this文章。首先,列出了几种变量初始化方法:
根据上下文,初始值设定项可以调用以下之一:
如果未提供初始值设定项,则 default initialization 的规则适用。
下一部分解释了非局部变量的初始化的两个阶段:静态和动态。 Zero initialization发生在静态阶段。在default initialization发生时,它没有说出一句话。
当你转到default initialization的描述时,有一个例子说:
int n; // static non-class, a two-phase initialization is done:
// 1) zero initialization initializes n to zero
// 2) default initialization does nothing, leaving n being zero
基于此,我假设默认初始化在零初始化之后的某个时间发生(零初始化处于静态初始化阶段)。但是,当默认初始化相对于其他初始化时,这是实际有人提到的唯一地方。
cppreference是不完整的,还是信息在那里,我找不到它?
答案 0 :(得分:3)
cppreference不是“官方”;这是一个维基。任何人都可以编辑它通常被认为具有相当高的质量,但您应该始终将标准和标准作为您的规范,权威的信息来源。
至于初始化,你的解释是正确的:首先进行零初始化,然后无论需要其他类型的初始化(无论是默认初始化还是其他)。
这是我可以看到引用文字的唯一解释,所以我看不出文章的哪一部分是“不完整的”。
答案 1 :(得分:2)
cppreference.com是否以任何方式成为官方网页
不,完全没有。
人们可以依赖于那里提供的文件吗?
这是我所知道的最好的免费在线C ++文档,它在Stackoverflow上有很好的声誉。
或者,如果我需要100%确定,我应该阅读语言文档吗?
C ++ ISO标准是唯一的官方来源,因此只有这样才能给您100%的确定性。标准文件不是免费的,而是drafts are free并且比如99.99%确定性。
当然," 100%确定"无论如何可能会产生误导。标准是由人类编写的,并且永远不会出现错误或矛盾,尤其是在处理像C ++这样复杂的语言时。如果是,则不会有任何official issues。甚至还有一个相对较新的official defect report for zero-initialisation。
您还必须记住," C ++ ISO标准" 可能意味着"已发布的C ++ ISO标准之一远" (1998年,2003年,2011年,2014年),"当前的C ++ ISO标准" (2014)或者甚至是即将到来的(2017年)。
所以也许上面的句子应该改为: A C ++ ISO标准是唯一的官方来源。
但这是实际有人提到的唯一地方 默认init相对于其他初始化发生。
那不是真的。例如,http://en.cppreference.com/w/cpp/language/zero_initialization说:
如非本地初始化中所述,静态和线程本地 不进行常量初始化的变量(自C ++ 14起) 在进行任何其他初始化之前,零初始化。
整个网站可能还有其他类似的解释。但即使你引用的部分是明确提到它的唯一地方,为什么这会使解释不完整呢?