Оптимальный вариант локальной именованной константы

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

Есть потенциально тяжелый (например, с необходимость динамического выделения памяти) локальный неизменяемый объект класса BigObject. Этот объект используется по месту, например:

void f() {
   g(BigObject{42});
}

Хочется этот BigObject{42} поименовать для улучшения самодокументируемости кода, например:

void f() {
   // static 
   // const
   // constexpr
   auto thing = BigObject{42};
   g(thing);
}

Можно ли предусмотреть вариант, подходящий в общем, или это всегда deal в зависимости от конечного использования?

Например, при однократном вызове f скорее всего достаточно иметь просто локальную константу, уничтожаемую при выходе из функции. Если вызовов много, то допустим static, чтобы не создавать объект N раз, но тогда он будет существовать до момента выгрузки кода, т.е. будет занимать память, когда уже перестал быть нужен.

Наверное, всё это ещё будет так или иначе обработано оптимизатором и реальный (низкоуровневый) код может быть совсем другим.

Тем не менее, какой вариант вам кажется предпочтительным и почему, какие плюсы и минусы вы видите для разных подходов, которые я не отразил в этом сообщении?

Ответы

Ответов пока нет.