默认构造函数和析构函数的“=default”和“{}”之间的区别
在 C 中,默认构造函数和析构函数是特殊的如果用户未显式定义,则由编译器自动生成的成员函数。然而,对于某些场景,有必要覆盖这些默认行为,这就提出了“=default”和“{}”是否提供相同功能的问题。
如果类需要虚拟析构函数,但实现与编译器生成的版本相同,可以使用“=default”语法。它确保编译器生成虚拟析构函数而不需要显式定义。另一方面,使用空定义“virtual ~Widget() {}”以最少的输入实现相同的效果。
与析构函数不同,“=default”的影响默认构造函数的 " 与 "{}" 明显不同。当使用“Widget() = default”时,编译器会自动为“Widget”类生成默认构造函数。这个生成的构造函数的行为就像用户没有定义构造函数一样。因此,它有助于使该类成为 C 11 术语中的“平凡类型”。
相反,“Widget() {}”创建一个用户提供的默认构造函数,从而防止该类被视为平凡。 C 11 对简单类型进行了限制,允许诸如 memcpy 之类的操作来实现高效初始化。
对于虚拟析构函数,“=default”和“{}”的行为类似。然而,对于默认构造函数,“=default”生成编译器提供的默认构造函数,而“{}”创建用户提供的默认构造函数,这可能会影响类的简单性。默认构造函数的“=default”和“{}”之间的选择应基于所需的行为以及对类的琐碎性的影响。
以上是C 中的默认构造函数和析构函数:何时应使用'=default”与'{}”?的详细内容。更多信息请关注PHP中文网其他相关文章!