在C ++ 98 / C ++ 03中使用std::cout
在具有statc存储持续时间的对象的构造函数中是否安全?
从这个answer来看似乎并非如此,但它并未包含标准中的任何引号。
在C ++ 11和C ++ 14中这样做是否安全?
答案 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;