据我所知,在C++中,如果没有用户定义的默认构造函数,则会隐式声明(并在需要时定义(默认构造函数。但是,用户可以使用default
关键字显式声明默认构造函数。在这篇文章中,答案主要是关于隐式和默认术语之间的区别,但我没有看到关于将构造函数声明为default
和根本不声明它之间是否存在一些区别的解释。
例如:
class Entity_default {
int x;
public:
Entity_default() = default;
}
class Entity_implicit {
int x;
}
在上面的示例中,我将Entity_default
的构造函数声明为default
,并让编译器隐式声明Entity_implicit
的默认构造函数。我想我以后会调用这些构造函数。这些构造函数在实践中有什么区别吗?
据我所知,函数或理论上没有区别,两者仍然是"琐碎的">
显式默认构造函数的使用:
- 确保它在不创建时存在,即如果存在不同的构造函数
- 您可以在不同的编译单元中默认它:
头文件:
struct Foo
{
std::string bar;
Foo() noexcept;
~Foo();
};
源文件:
Foo::Foo() noexcept = default;
Foo::~Foo() = default;
如果您不希望使用内联构造函数来节省代码大小或确保ABI兼容性,那么这将非常有用。请注意,在这一点上,它不再是一个琐碎的对象。