P1008(“禁止使用用户声明的构造函数进行聚合”)已成为 C++20 标准的一部分,以防止在使用聚合初始化时出现意外行为:
struct X {
int i{42};
X() = delete;
};
int main() {
X x2{3}; // Compiles in C++17, error in C++20
}
我同意上述X x2{3};
声明不应编译。然而,我遇到的所有证明 P1008 的例子根本不现实——它们纯粹是句法,基本上没有意义//foo
代码片段。bar
baz
P1008在实践中解决了什么问题?我发现很难想象我最终会如何X
在一个真实的程序中写出类似上面的东西。
在 C++17 聚合中删除默认构造函数而不提供其他构造函数来初始化它对我来说似乎是不现实的。