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