Ввод/вывод в конструкторах и деструкторах C++

Рейтинг: 0Ответов: 1Опубликовано: 12.07.2023

Когда-то столкнулся с "неадекватным" поведением вывода в консоль из конструктора. Типа вывод в конструкторе добавлен, а в итоге в релизной сборке мы его не видим. Тогда же разбирались и вроде как нашли какой-то пункт стандарта, который говорил о том, что в конструкторах нельзя иметь никаких побочных эффектов. Что позволяло, к примеру, сделать "copy elision" и тому подобное.

Подскажите, пожалуйста, какой пункт стандарта регулирует этот вопрос?

То же про деструкторы.

Правда ли, что в конструкторах и деструкторах нельзя ничего выводить на экран, или этот вывод не будет гарантирован стандартом?

Интересует именно вопрос с точки зрения стандарта, а не "как реально работает", потому что может так оказаться, что в 99% вариантов оно всё сработает, а проблемы появятся при специфичных условиях.

Ответы

▲ 1

Такого запрета нет.

Единственное, что приходит в голову - нельзя просто так выводить в std::cout из конструктора шаблонной переменной, потому что он к этому моменту может не быть инициализирован.

Лечится созданием в начале конструктора объекта std::ios_base::Init init;.