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

C++ std::cout在具有静态存储持续时间的对象的构造函数中的用法,c++,c++11,c++14,c++03,c++98,C++,C++11,C++14,C++03,C++98,在C++98/C++03中具有statc存储持续时间的对象的构造函数中使用std::cout安全吗 从这个角度看,它似乎不是,但它没有包括任何引用标准 在C++11和C++14中这样做安全吗?来自C++14(N3797),§27.4p2: 在第一次测试之前或测试期间,构建对象并建立关联 构造类ios_base::Init的对象时,以及在任何情况下,在main的主体开始exe之前- cution.295在程序执行期间,对象不会被破坏。296包括 在翻译单元中,应定义一个具有静态存储的ios_bas

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

从这个角度看,它似乎不是,但它没有包括任何引用标准

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

来自C++14(N3797),§27.4p2:

在第一次测试之前或测试期间,构建对象并建立关联 构造类ios_base::Init的对象时,以及在任何情况下,在main的主体开始exe之前- cution.295在程序执行期间,对象不会被破坏。296包括 在翻译单元中,应定义一个具有静态存储的ios_base::Init实例 期间类似地,整个程序的行为应与至少有一个ios_base::Init实例一样 具有静态存储持续时间

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

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

#include <ostream>
extern std::ostream cout;
#包括
外部标准::ostream cout;

安全与否,原因很简单@大卫·哈伊姆为什么?为什么我要在这样的对象中使用
std::cout
?在构造函数内部..@DavidHaim,从来没有听说过在构造函数内部进行priniting???@DavidHaim是一个穷人的启动登录系统,或者只是一个调试工具,为什么不呢?C++ C++ 98/C++ 03是什么?在所有C++语言中,它都有相同的行为,在这些对象中,我完全安全地使用了<代码> STD::CUT<代码>,对吗?从一个开始,在这结束,在C++ 98和C++ 11之间改变了这一点。虽然这在实践中可能是好的,但声称C++98和C++03中的标准文本支持这一点充其量是误导的。并且该段声称禁止的代码(假设您实际上打算将
cout
放入
std
)实际上已经被禁止了,除非另有规定,否则不能向
std
添加声明。@t.C.就好像这阻止了任何人一样。