MSVC ios_base :: Init如何工作?

时间:2016-06-20 07:51:09

标签: visual-c++

文件说明:

  

嵌套类描述了一个构造确保的对象   即使之前,标准的iostreams对象也是正确构造的   执行任意静态对象​​的构造函数。

见:

https://msdn.microsoft.com/en-gb/library/fbyc90zw.aspx

但是由于静态对象有一个未定义的init排序,ios_base::Init如何确保它在它们之前运行?

2 个答案:

答案 0 :(得分:0)

我会担心静态变量的初始化顺序是未定义的,但构造函数调用创建对象/变量(静态或非静态)的顺序是明确定义的。

答案 1 :(得分:0)

ios_base::Init类嵌套在ios_base类中。因此,当构造任何ios_base实例时,也会运行ios_base::Init构造函数。

使用ios_base的对象的哪些可能的静态实例存在或者它们运行的​​顺序并不重要。重要的是ios_base::Init能够运行并初始化首先是标准流(对ios_base::Init的所有其他构造函数调用可能什么都不做,因为第一个构造函数调用已经完成了工作)。