Объекты iostream cin, cout, cerr и clog являются объектами, объявленными в заголовке iostream.
Мне известно, что в некоторых компиляторах возможно попытаться использовать эти объекты iostream до того, как они будут созданы, поэтому при некоторых обстоятельствах они должны подвергаться "фиаско статического порядка инициализации". В тех компиляторах, где всегда безопасно использовать std :: cout и др., Как эти объекты на самом деле создаются? Включает ли это магию компилятора под капотом или все это в принципе может быть сделано со стандартным C ++?
std :: cout и т. Д. Кажутся либо глобальными переменными, либо синглтоном: почему глобальные переменные и синглтоны обычно считаются злом, но, по-видимому, не в этом конкретном случае?