У меня есть код на С++, который сводится к следующему:
class Foo{
bool bar;
bool baz;
Foo(const void*);
};
Foo::Foo(const void* ptr){
const struct my_struct* s = complex_method(ptr);
bar = calculate_bar(s);
baz = calculate_baz(s);
}
Семантически, переменные-члены bar и baz должны быть const, так как после инициализации они не должны меняться. Однако, похоже, что для их создания мне нужно будет инициализировать их в списке инициализации, а не назначать их. Чтобы быть ясным, я понимаю, зачем мне это нужно. Проблема в том, что я не могу найти способ конвертировать код в список инициализации, не выполняя одно из следующих нежелательных действий:
- Вызов
complex_method
дважды (будет плохо для производительности) - Добавить указатель на класс Foo (сделает размер класса ненужным большим)
Есть ли способ сделать переменные const, избегая этих нежелательных ситуаций?