繁体   English   中英

默认的默认构造函数,为什么它不是用户提供的默认构造函数?

[英]A defaulted default constructor, why is it not a user-provided default constructor?

例如, clang不编译此代码,因为,下面的struct A的默认默认构造struct AA() = default; 不被视为用户提供。

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

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

函数体:
ctor-initializer opt 复合语句
功能试块
= default ;
= delete ;

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

顺便说一句, g++编译上面的代码片段,但我知道g++在这方面有其他问题,根据Jonathan Wakely的评论

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

如果函数是用户声明的,并且在第一个声明中未明确默认或删除,则用户提供该函数。

这样做可以让你用= default;维护triviality属性= default; 否则,没有办法给另一个构造函数的类一个普通的默认构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM