小智 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++是最优雅的,我可以理解为什么它几乎被后继语言普遍采用.
C++语言标准:
12.1.构造函数没有名称.
你的问题是基于混乱.构造函数使用特殊声明语法,其中再次使用类名来代替成员名.我没有看到该语法有什么问题,所以我甚至无法想象会触发你的问题(这使得很难回答,如果不是不可能的话).
然而,C++中的构造函数没有名称.它们根本不需要名称,因为在设计中,C++中没有必须引用构造函数的上下文.
在最初的"C with classes"中它实际上并非 - 它被命名为"new",IIRC.无论如何,对于关于C++的大多数"为什么"的问题,你可以在"C++的设计和演变"一书中找到答案.