Ale*_*der 3 c++ language-lawyer c++14
例如,clang不编译此代码,因为struct A下面的默认默认构造函数A() = default;不被视为用户提供.
struct A{ A() = default; };
const A a;
Run Code Online (Sandbox Code Playgroud)
但如果你看[dcl.fct.def.general]/1,你会看到:
function-body:
ctor-initializer opt compound-statement
function-try-block
= default ;
= delete ;
也就是说,= default;是函数体的默认构造函数A::A(),这是相同的话说,定义A() = default;上述相当于A(){}为{}是身体的默认构造函数.
顺便说一句,g++汇编上面的片段,但我知道g++在这方面还有其他问题,根据Jonathan Wakely的评论.
因为标准是这样说的([dcl.fct.def.default]/5):
如果函数是用户声明的,并且在第一个声明中未明确默认或删除,则用户提供该函数.
这样做可以让你保持琐碎属性= default;.否则,没有办法给另一个构造函数的类一个普通的默认构造函数.
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |