在 C++17 中,标准库中的空标记类型现在具有标记为 的默认构造函数explicit
,并且也是= default
. 例如,std::piecewise_construct_t
现在定义为
struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
我的问题很简单,从 C++14 发生这种变化的原因是什么?显式默认的显式默认构造函数(!)对于空类意味着什么?
(为了避免被标记为骗子:这个问题从 2010 年开始询问显式默认构造函数的目的,但那是 C++11 之前和很久以前的事了,所以事情可能已经改变了。这个问题是最近的,但是答案似乎表明,无论是否存在默认构造函数,都会执行聚合初始化,所以我很好奇最新标准中这种变化的原因。)