为什么 C++ 将 class 的名称用于 ctor/dtor?

Why does C++ use the name of the class for the ctor/dtor?

关于 C++,偶尔让我厌烦的一件事是重复定义构造函数。在单独的 cpp 文件中定义 ctors 时尤其如此。当我们泛指它们时,通常会说"constructor"、"destructor"、"copy constructor",或简称为"ctor"、"dtor"、"cctor" .甚至一些 C++ 编译器也会这样缩写它们。那么为什么语言不使用它呢?不是:

class SomeLongSelfDocumentingClassName
{
   ctor(int a, string b);
   cctor(const SomeLongSelfDocumentingClassName& other);
   ~dtor();
};

SomeLongSelfDocumentingClassName::ctor(int a, string b) { /* ... */ }
SomeLongSelfDocumentingClassName::cctor(const SomeLongSelfDocumentingClassName& other) { /* ... */ }
SomeLongSelfDocumentingClassName::dtor(int a, string b) { /* ... */ }

比:

更容易阅读
class SomeLongSelfDocumentingClassName
{
   SomeLongSelfDocumentingClassName(int a, string b);
   SomeLongSelfDocumentingClassName(const SomeLongSelfDocumentingClassName& other);
   ~SomeLongSelfDocumentingClassName();
};

SomeLongSelfDocumentingClassName::SomeLongSelfDocumentingClassName(int a, string b) { /* ... */ }
SomeLongSelfDocumentingClassName::SomeLongSelfDocumentingClassName(const SomeLongSelfDocumentingClassName& other) { /* ... */ }
SomeLongSelfDocumentingClassName::SomeLongSelfDocumentingClassName(int a, string b) { /* ... */ }

?

诚然,我一直重复这样做了很长时间,以致于乍一看前一个块看起来像胡说八道。 Stroustrup 选择我没有想到的重复表示有充分的理由吗?

它来自 C++ 的演进 "C with classes"。

C 和 C++ 语言委员会(现在是 ISO)总是不愿意引入新的关键字,因为这样做会破坏很多代码。 ctordtor 本来就是一个新关键字。请注意,由于 C++ 支持函数重载,因此不再需要 cctor;即使最初的草稿没有。

此外,能够将成员函数命名为与 class 的名称相同将是一种混淆练习!因此,在这种情况下将其保留用于构建和销毁是有意义的。

使用 class 的名称作为构造函数,使用 ~ 作为析构函数的名称在当时是一个明智的选择。至少在我看来,它仍然是。