如何解决在什么情况下 C++11 = 默认构造函数与不带参数和空体的构造函数不同?
我知道如果提供了参数化构造函数,则不会生成隐式默认构造函数。
如果我们有一个不带参数的构造函数和一个空的主体,它可以扮演默认构造函数的角色。
class Box {
public:
Box(int value) : x(value) {} // parametrized constructor
Box() {} // default constructor
private:
int x;
};
在 C++11 中,我们可以编写 = default
来指定我们希望隐式生成的默认构造函数存在,即使我们已经有一个参数化的构造函数。
class Box {
public:
Box(int value) : x(value) {} // parametrized constructor
Box() = default;
private:
int x;
};
我想知道,这两种显式指定默认构造函数的语法有区别吗?它们是等价的还是不等价的?不带参数和主体的构造函数真的是默认构造函数还是其他什么?
我想问一下,会不会存在不带参数和不带体的构造函数的行为与C++11 = default
构造函数不同的情况?欢迎使用晦涩难懂的例子。
解决方法
一个区别是,如果您使用 =default
默认构造函数,则该类型将变为文字类型,这使得该类型的对象能够用作 constexpr
变量。
class Box {
// ...
Box() = default;
};
constexpr Box box{}; // ok
class Box {
// ...
Box() {}
};
constexpr Box box{}; // error
这是一个 demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。