C默认构造函数语法
作者:互联网
参见英文答案 > How is “=default” different from “{}” for default constructor and destructor? 3个
我对C中的默认构造函数有疑问.例如,在A类中,使用此默认构造函数A(){};或A()=默认; ?它们之间的一般区别是什么?
先感谢您!
解决方法:
在第一个声明中定义为默认的构造函数被认为不是用户提供的.这基本上就像在C 03中隐含一样.这样的构造函数声明在聚合类中是允许的.
struct ag {
ag() = default;
int a;
double b;
};
struct nag {
nag() {}
int a;
double b;
};
ag a = { 5, 12. }; // OK
nag na = { 5, 12. }; // error: not an aggregate and no appropriate constructor
此规则仅适用于= default出现在类中.鉴于此类定义:
struct nag {
nag();
int a;
double b;
};
那么这些构造函数定义确实是完全等价的:
nag::nag() {} // 1
nag::nag() = default; // 2
显式默认构造函数通常禁用空副本列表初始化语法(= {})和{}作为参数或返回值.聚合中的显式默认和显式默认构造函数容易混淆地遵守此规则,因为聚合初始化具有比构造函数初始化更高的优先级.这提供了一种检测类是否为聚合的方法,但您可能不应该这样做.
struct sadistic {
explicit sadistic() = default;
// members
};
sadistic se = {}; // OK only if sadistic has no virtual functions, etc.
标签:c,default-constructor 来源: https://codeday.me/bug/20190830/1770768.html