私はこのようなクラスを持っています:
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
// more stuff
};
通常私counts
は示されているようにデフォルト(ゼロ)配列を初期化したいと思います。
ただし、プロファイリングによって特定された特定の場所では、配列が上書きされることがわかっているため、配列の初期化を抑制したいのですが、コンパイラーはそれを理解するのに十分なほどスマートではありません。
そのような「セカンダリ」ゼロ引数コンストラクタを作成する慣用的で効率的な方法は何ですか?
現在、次のuninit_tag
ように、ダミー引数として渡されるタグクラスを使用しています。
struct uninit_tag{};
struct event_counts {
uint64_t counts[MAX_COUNTERS];
event_counts() : counts{} {}
event_counts(uninit_tag) {}
// more stuff
};
次に、構築event_counts c(uninit_tag{});
を抑制したいときのように、no-initコンストラクターを呼び出します。
私は、ダミークラスの作成を含まない、または何らかの方法でより効率的なソリューションなどを受け入れています。