Выкинет ли оптимизатор код инициализации неиспользуемой пере
От: Basil2 Россия https://starostin.msk.ru
Дата: 03.10.23 16:06
Оценка:
Есть код:

void DoLogging()
{
static const bool created = std::filesystem::create_directories(PathToLog);
...
}

Константа created нигде не используется. Конструкция с ней сделана только для того, чтобы не запариваться с once_flag/call_once для вызова create_directories(). Код получается лаконичнее и чище.

Однако, пришла мысль — ну как компилятор увидит, что константа не используется, и выкинет вызов create_directories()?

Вопрос — что о такой ситуации говорит Стандарт?

Я нашел немного про gcc:
"Static variables that are not used (or only written to), whose address is not taken or does not escape, are removed. Static functions that are called only once are inlined, those that are never called are never generated (unless you take pointers to them)."

Но хотелось бы узнать, что говорит на этот счет Стандарт.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.
Отредактировано 03.10.2023 16:10 Basil2 . Предыдущая версия . Еще …
Отредактировано 03.10.2023 16:09 Basil2 . Предыдущая версия .
Отредактировано 03.10.2023 16:08 Basil2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.