【发布时间】:2012-01-30 00:47:00
【问题描述】:
在回答this question 并没有在标准论文中找到令人满意的答案后,我开始怀疑。该标准规定了以下 w.r.t.上述变量的初始化:
§6.7 [stmt.dcl] p4
[...] 否则,此类变量在控件第一次通过其声明时被初始化; 此类变量在其初始化完成后被视为已初始化。如果初始化抛出异常退出,则初始化未完成,下次控件进入声明时会再次尝试。
没有提到如果初始化失败除了抛出异常(longjmp()、thead 退出、仅举几例)之外的任何其他原因导致初始化被重试的原因。
我是否忽略了标准中的任何内容?我一遍又一遍地查看初始化、声明和异常子句,甚至通过快速搜索“静态”来查阅CWG defects table of content,但找不到任何相关内容。
这是否是标准中的规范不足(并且是这样的缺陷)?
【问题讨论】:
-
C++ 是否定义了与信号相关的任何东西?还是
longjmp?线程退出可能会改变一些事情。 -
您是否有任何具体场景没有被标准充分指定?
-
@Kerrek:链接的问题。 :P
-
@Lightness:
setjmp/longjmp为 18.10/4。另请参阅:open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#28 -
@Xeo:嗯...我不太明白这个问题有什么含糊之处。您能否详细说明为什么您认为该行为没有得到充分明确的规定?
标签: c++ c++11 language-lawyer static-initialization