C++中隐式构造函数和默认构造函数之间的实际区别



据我所知,在C++中,如果没有用户定义的默认构造函数,则会隐式声明(并在需要时定义(默认构造函数。但是,用户可以使用default关键字显式声明默认构造函数。在这篇文章中,答案主要是关于隐式默认术语之间的区别,但我没有看到关于将构造函数声明为default和根本不声明它之间是否存在一些区别的解释。

例如:

class Entity_default {
int x;
public:
Entity_default() = default;
}
class Entity_implicit {
int x;
}

在上面的示例中,我将Entity_default的构造函数声明为default,并让编译器隐式声明Entity_implicit的默认构造函数。我想我以后会调用这些构造函数。这些构造函数在实践中有什么区别吗?

据我所知,函数或理论上没有区别,两者仍然是"琐碎的">

显式默认构造函数的使用:

  1. 确保它在不创建时存在,即如果存在不同的构造函数
  2. 您可以在不同的编译单元中默认它:

头文件:

struct Foo
{
std::string bar;
Foo() noexcept;
~Foo();
};

源文件:

Foo::Foo() noexcept = default;
Foo::~Foo() = default;

如果您不希望使用内联构造函数来节省代码大小或确保ABI兼容性,那么这将非常有用。请注意,在这一点上,它不再是一个琐碎的对象。

相关内容

最新更新