【发布时间】:2011-04-17 19:55:17
【问题描述】:
C++0x 允许您将某些函数指定为默认值:
struct A {
A() = default; // default ctor
A(A const&) = default; // copy ctor
A(A&&) = default; // move ctor
A(Other); // other ctor
~A() = default; // dtor
A& operator=(A const&) = default; // copy assignment
A& operator=(A&&) = default; // move assignment
};
这些函数的实现与编译器生成它们时相同,在大多数情况下,当您没有声明自己的函数时,通常会发生这种情况。
如果您声明任何 ctor(上述任何其他 ctor),则不会生成默认 ctor,因此您可能需要将其默认为“将其恢复”。
但是,除非基成员或数据成员排除它们,否则类始终具有复制和移动 ctor—如果它们被排除,则默认实现将不起作用。一个类总是有一个 dtor。
为什么需要显式默认复制 ctor、移动 ctor 或析构函数?无论如何,隐式生成的实现不会做同样的事情吗?
【问题讨论】:
-
您发布了一个问题,链接了您自己的重复问题,然后回答了您自己的问题?
-
@John:我撰写了问题和答案(正如 SO 不时鼓励的那样),因为我自己发现了这一点(其他人在 IRC 上提出了这个问题,我在上面详细说明了)。我在发布一个多小时后找到了副本——在我开始写这篇文章大约 4 小时后。 (不,总共没花那么长时间,我没有直接完成。;)
-
IRC 在哪里讨论 C++0x? (不过如果你不回答这个问题,我的工作效率可能会更好)
-
@James:哈! Freenode ##c++(在其他频道中,肯定包括##iso-c++,尽管前者的主题更广泛)和 EFnet #c++(主题差异很大)。
标签: c++ c++11 defaulted-functions