为每个非用户定义的构造函数声明始终默认的构造函数有什么利弊?
考虑一个具有用户定义的构造函数的类,该构造函数不需要其他用户定义的构造函数,它将是:
class Foo
{
public:
Foo() { // user-defined declaration }
Foo(const Foo&) = default;
Foo(Foo&&) noexcept = default;
~Foo() = default;
Foo& operator=(const Foo&) = default;
Foo& operator=(Foo&&) = default;
}
这样做有其他实际的优点/缺点吗?
答案 0 :(得分:5)
我头顶的几个缺点:
std::unique_ptr
成员。您可以通过包含类定义来缓解这种情况(导致非重要项目的(重新)构建时间的最终总体增加,特别是当非前向声明的类经常更改时)。您可以通过将= default
移动到源文件中的定义来缓解此问题。可能还有一些,超越这些的超越性水平上升。
答案 1 :(得分:5)
没有任何优势。它只是向读者展示了您不知道C ++编译器如何工作的代码。如果将此强制实施为策略,则您也很容易受到未来C ++标准的更改。
使用
的例外情况let addLeadingZero(v){
return v < 10 ? ("0" + v) : v;
}
$scope.TravelTime = addLeadingZero(TravelTimeHoursDiff) + ':' + addLeadingZero(TravelTimeMinutesDiff);
在基类中,我们引入了可以帮助内存管理的多态性。
另一类异常是您可能想要更改virtual ~Foo() = default;
能力函数的访问说明符的情况:
default
如果仅希望通过继承使用类,但不想使其成为多态类型,那么我在此提供的显式示例非常有用。