显式构造函数默认和删除对 C 20 中聚合初始化的影响
自引入 C 20 以来,发生了显着变化当构造函数被显式默认或删除时聚合初始化的行为。在本次讨论中,我们将调查此更改背后的原因及其对开发人员的影响。
C 20 中的更改
在 C 20 之前,允许聚合初始化对于具有用户提供的构造函数的结构,只要这些构造函数没有显式默认或删除。然而,在 C 20 中,此异常已被删除,这意味着具有显式默认或删除的构造函数的结构不能再使用聚合进行初始化。
更改背后的原因
引入C 20的更改是为了增强初始化语义的安全性和一致性。具体来说,这个问题围绕着同一结构中聚合初始化和构造函数共存而引起的潜在混乱。考虑以下示例:
<code class="cpp">struct Foo { int bar; Foo() = default; }; int main() { Foo f { 0 }; // Error in C++20 }</code>
在此示例中,struct Foo 有一个显式默认的构造函数。在 C 20 之前,此代码是有效的,聚合初始化绕过默认构造函数。然而,在 C 20 中,这种行为是不允许的,以防止用户无意中绕过关键的初始化逻辑。
开发人员的后果
C 20 中的更改删除了以前可用的选项用于使用构造函数初始化结构。因此,依赖显式默认或删除的构造函数进行聚合初始化的开发人员将需要重新评估他们的方法。
结论
删除聚合初始化C 20 中具有显式默认或删除构造函数的结构旨在提高初始化安全性和一致性。虽然这可能会给以前使用此技术的开发人员带来一些不便,但增强清晰度和可靠性的总体好处超过了缺点。我们鼓励开发人员调整他们的代码以适应这一变化,并在必要时考虑替代初始化方法。
以上是C 20 中具有显式默认或删除构造函数的结构是否仍可以进行聚合初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!