Информация об изменениях

Сообщение Выкинет ли оптимизатор код инициализации неиспользуемой пере от 03.10.2023 16:06

Изменено 03.10.2023 16:08 Basil2

Выкинет ли оптимизатор код инициализации неиспользуемой переменной?
Есть код:

void StartLogging()
{
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)."

Но хотелось бы узнать, что говорит на этот счет Стандарт.
Выкинет ли оптимизатор код инициализации неиспользуемой пере
Есть код:

void StartLogging()
{
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)."

Но хотелось бы узнать, что говорит на этот счет Стандарт.