具有静态存储持续时间的对象的构造函数中的std :: cout用法

时间:2016-06-08 15:15:42

标签: c++ c++11 c++14 c++03 c++98

在C ++ 98 / C ++ 03中使用std::cout在具有statc存储持续时间的对象的构造函数中是否安全?

从这个answer来看似乎并非如此,但它并未包含标准中的任何引号。

在C ++ 11和C ++ 14中这样做是否安全?

1 个答案:

答案 0 :(得分:2)

从C ++ 14(N3797),§27.4p2:

  

构造对象并在第一次之前或期间的某个时间建立关联   时间构造一个类ios_base :: Init的对象,并且无论如何在main的主体开始之前执行   cution.295在程序执行期间不会销毁对象.296包含的结果   在翻译单元中应该像定义具有静态存储的ios_base :: Init的实例一样   持续时间。类似地,整个程序应该表现得好像至少有一个ios_base :: Init实例   具有静态存储持续时间。

C ++ 98使用类似的术语,但没有“as if”子句。

基本上,禁止main之前使用以下内容:

#include <ostream>
extern std::ostream cout;