可能有人已经问过这个问题,但谷歌搜索“默认”、“默认”、“显式”等并没有给出好的结果。但无论如何。
我已经知道显式定义的默认构造函数(即没有参数)和显式定义的默认构造函数(即使用关键字 default
)之间存在一些差异,来自此处:The new keyword =default in C++11
但是显式定义的默认构造函数和隐式定义的默认构造函数(即当用户根本不编写时)之间有什么区别?
class A
{
public:
A() = default;
// other stuff
};
对比
class A
{
// other stuff
};
想到的一件事是,当存在非默认构造函数时,用户还必须显式定义默认构造函数。但是还有其他区别吗?
编辑:我最感兴趣的是知道是否有任何充分的理由编写 A() = default;
而不是完全省略构造函数(假设它是该类唯一明确定义的构造函数,当然)。
最佳答案
=default
的目的是使隐式定义显式化。隐式定义版本和显式默认版本之间的任何差异仅限于由于存在显式声明而出现的一些额外可能性。
隐式声明/定义的构造函数始终是
public
,而显式定义的默认构造函数的访问控制在您自己的控制之下。定义一个默认的默认构造函数使您可以使用属性对其进行注释。例如:
$ cat a.cpp class A { public: [[deprecated]] A() = default; }; int main() { A a; } $ g++ -std=c++14 a.cpp a.cpp: In function ‘int main()’: a.cpp:9:7: warning: ‘constexpr A::A()’ is deprecated [-Wdeprecated-declarations] A a; ^ a.cpp:4:20: note: declared here [[deprecated]] A() = default; ^
关于c++ - 默认构造函数与隐式构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41219291/