C++中的构造函数

sra*_*van 6 c++ constructor language-design

为什么构造函数的名称与类名相同?

小智 10

根据Stroustrup的说法,因为新功能的替代"一直是混乱的根源".请参阅"C++的设计与演变",第3.11.2节,尽管这是我引用的完整理由.

编辑:正如人们所指出的,有许多替代解决方案.Smalltalk例如,这样做:

myclass new
Run Code Online (Sandbox Code Playgroud)

向myclass类对象发送"new"消息.显然,这里的C++解决方案有点傻:

myclass myclass
Run Code Online (Sandbox Code Playgroud)

显然不是明智的.

Delphi,OTOH,允许任何命名函数作为构造函数,通过标记它:

constructor Create;
constructor FooBar;
Run Code Online (Sandbox Code Playgroud)

对于任何类都是好的构造函数名称.与Smalltalk一样,您需要在类对象上调用它们:

myclass.Create;
Run Code Online (Sandbox Code Playgroud)

在所有这些解决方案中,我认为C++是最优雅的,我可以理解为什么它几乎被后继语言普遍采用.


AnT*_*AnT 9

C++语言标准:

12.1.构造函数没有名称.

你的问题是基于混乱.构造函数使用特殊声明语法,其中再次使用类名来代替成员名.我没有看到该语法有什么问题,所以我甚至无法想象会触发你的问题(这使得很难回答,如果不是不可能的话).

然而,C++中的构造函数没有名称.它们根本不需要名称,因为在设计中,C++中没有必须引用构造函数的上下文.


Nem*_*vic 5

在最初的"C with classes"中它实际上并非 - 它被命名为"new",IIRC.无论如何,对于关于C++的大多数"为什么"的问题,你可以在"C++的设计和演变"一书中找到答案.


Bri*_*ndy 1

因为语言规范就是这么说的。在某些语言(例如 Python)中,情况并非如此。