次のようなものに要約される C++ コードがあります。
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 である必要があります。ただし、そのようにするには、割り当てるのではなく、初期化リストで初期化する必要があるようです。明確にするために、なぜこれを行う必要があるのか を理解しています。問題は、次の望ましくないことのいずれかを行わずに、コードを初期化リストに変換する方法が見つからないように見えることです。
- 2 回呼び出す
complex_method
(パフォーマンスが低下する可能性があります) - Foo クラスへのポインターを追加します (クラスのサイズが不必要に大きくなります)。
これらの望ましくない状況を回避しながら、変数を const にする方法はありますか?