【发布时间】:2011-09-08 13:54:32
【问题描述】:
我对构造函数链接的理解是,当一个类中有多个构造函数(重载构造函数)时,如果其中一个试图调用另一个构造函数,那么 这个过程称为 CONSTRUCTOR CHAINING ,在 C++ 中不受支持。 最近在看网上资料的时候偶然发现了这一段……是这样的……
您可能会发现自己需要编写一个成员函数来将一个类重新初始化为默认值。因为您可能已经有一个执行此操作的构造函数,所以您可能很想尝试从您的成员函数调用构造函数。如前所述,链接构造函数调用在 C++ 中是非法的。您可以从函数中的构造函数复制代码,这会起作用,但会导致重复代码。在这种情况下,最好的解决方案是将代码从构造函数移到新函数中,并让构造函数调用您的函数来完成初始化数据的工作。
调用构造函数的成员函数是否也属于构造函数链? 请用 C++ 阐明这个主题。
【问题讨论】:
-
我会说不是,文章说构造函数链接是非法的,这是不合理的,紧接着说一些任意成员函数(不一定是构造函数)可能认为它想要调用构造函数来重置值。但谁知道呢,你没有引用这篇文章,也没有引用它描述构造函数链接的地方,所以它可能是在其他地方已经描述的某种不寻常的意义上使用它。
-
这并不违法。从成员调用构造函数具有创建应用构造的临时对象的效果,而不是从中进行调用的“this”对象。
-
@Amardeep:同意,更准确地说,构造函数链接在 C++03 中是“不可能的”,而不是“非法的”。根本没有语法来描述这样做。正如您所说,按照正常定义,调用构造函数与构造函数链接完全不同。
-
@Steve .. 和其他感兴趣的人.. 这是link :)
-
C++构造函数调用另一个构造函数是c++ 11中的一个特性,叫做Delegating Constructors,见链接open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf
标签: c++ constructor specifications constructor-chaining