鉴于下面的示例,我惊讶地发现,尽管默认构造函数被显式删除(或为此设为默认),聚合初始化仍然是可能的。
#include <iostream>
struct DefaultPrivate
{
const int n_;
static const DefaultPrivate& create();
private:
DefaultPrivate() = delete;
};
const DefaultPrivate& DefaultPrivate::create()
{
static DefaultPrivate result{10};
return result;
}
int main() {
DefaultPrivate x; //Fails
DefaultPrivate y{10};//Works
return 0;
}
标准中是否未指定私有默认(或已删除)构造和聚合初始化之间的关系?
GCC 6.3 和 VCC 2017 都是这种情况
我问这个问题的原因是,我希望更改对默认构造函数的访问会阻止公共聚合初始化