其他分享
首页 > 其他分享> > C默认构造函数语法

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