gpt4 book ai didi

c++ - 一个默认的默认构造函数,为什么不是用户提供的默认构造函数呢?

转载 作者:太空狗 更新时间:2023-10-29 20:10:22 24 4
gpt4 key购买 nike

例如,clang 不会编译这段代码,因为,下面struct A 的默认构造函数,A() = default; 不被认为是用户提供的。

struct A{ A() = default; };
const A a;

但是如果你看[dcl.fct.def.general]/1你会看到:

函数体:
ctor-initializeropt 复合语句
函数尝试 block
=默认;
=删除;

=default;是默认构造函数A::A()函数体,与说上面的定义 A() = default; 等同于 A(){} 因为 {} 是默认构造函数的主体.

顺便说一句,g++ 编译了上面的代码片段,但我知道 g++ 在这方面还有其他问题,根据 this comment乔纳森·韦克利 (Jonathan Wakely) 着。

最佳答案

因为标准是这样说的([dcl.fct.def.default]/5):

A function is user-provided if it is user-declared and not explicitly defaulted or deleted on its first declaration.

这样做可以让您使用 = default; 来维护琐碎属性。否则,无法为具有另一个构造函数的类提供普通的默认构造函数。

关于c++ - 一个默认的默认构造函数,为什么不是用户提供的默认构造函数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40195444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com