[英]Understanding initialization order in C++
cppreference.com是一个官方页面,可以依赖于那里提供的文档吗? 或者我应该只是阅读语言文档,以防我需要100%的确定性?
看看这篇文章。 首先,列出了几种变量初始化方法:
根据上下文,初始化程序可以调用以下之一:
如果未提供初始化程序,则应用默认初始化规则。
下一部分解释了非局部变量的两个初始化阶段:静态和动态。 零初始化发生在静态阶段。 虽然默认初始化发生时没有说出一个字。
当你转到默认初始化的描述时,有一个例子说:
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
基于此,我假设默认初始化在零初始化之后的某个时间发生(零初始化处于静态初始化阶段)。 但是这是实际有人在默认init相对于其他初始化时提到的地方。
cppreference是不完整的,还是信息在那里,我找不到它?
cppreference不是“官方的”; 这是一个维基。 任何人都可以编辑 它通常被认为是相当高的质量,但你应该始终把标准和标准作为你的规范,权威的信息来源。
至于初始化,您的解释是正确的:首先进行零初始化, 然后进行任何其他类型的初始化(无论是默认初始化还是其他)。
这是我可以看到引用文本的唯一解释,所以我没有看到文章的哪一部分是“不完整的”。
cppreference.com是一个官方页面
一点都不。
一个人可以依赖于那里提供的文件?
这是我所知道的最好的免费在线C ++文档,它在Stackoverflow上有很好的声誉。
或者我应该只是阅读语言文档,以防我需要100%的确定性?
C ++ ISO标准是唯一的官方来源,因此只有这样才能给您100%的确定性。 标准文件不是免费的,但草稿是免费的 ,比如99.99%的确定性。
当然,“100%确定性”可能会产生误导。 标准是由人类编写的,并且永远不会出现错误或矛盾,尤其是在处理像C ++这样复杂的语言时。 如果是,那就不会有任何官方问题 。 甚至还有一个相对较新的关于零初始化的官方缺陷报告 。
您还必须记住, “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)在进行任何其他初始化之前都是零初始化的。
整个网站可能还有其他类似的解释。 但即使你引用的部分是明确提到它的唯一地方,为什么这会使解释不完整呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.