我有这样的课:
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构造函数。
我对不涉及创建哑类或以某种方式更有效的解决方案持开放态度。