【发布时间】:2011-02-25 03:41:58
【问题描述】:
阅读this 文章后,我指出int () 产生0 是因为临时int 是值初始化的,而不是因为int() 调用int 的默认构造函数。 (根据我的理解,这篇文章有缺陷。)
我还说过原始(内置)类型没有构造函数。原作者让我检查第 10.4.2 节(TC++PL),上面写着
内置类型也有默认构造函数 ($6.2.8)
但我仍然认为“C++ 甚至允许内置类型(原始类型)具有默认构造函数”这句话。有缺陷(根据 C++03)。
我认为 TC++PL 中的 Bjarne 将“类似构造函数的符号,即()”与实际的构造函数调用混为一谈。 Bjarne 在写这本书的时候并没有引入值初始化,对吧?那么根据 C++98 和 C++03,TC++PL 中的文本是否不正确?
你们觉得呢?
编辑
我亲自(通过邮件)向 Bjarne 询问了 TC++PL 中有缺陷的文本,这是他的回复
我认为您将“实际的构造函数调用”与概念上的构造函数混为一谈。 内置类型被认为具有构造函数(无论标准使用什么词来描述它们的行为)。
【问题讨论】:
-
为什么这个被关闭为主观和争论?这肯定有一个“是/否”的答案。
-
顺便说一句,我认为这个矛盾之前已经出现过。 TC++PL 在某些领域过于简化和概括,在这种情况下是错误的。
-
如果它看起来像构造函数,走路像构造函数,说话像构造函数......如果它不是构造函数真的重要吗?
-
对我来说听起来像是对术语的争论。
-
@Keith :值初始化是在 C++03 中引入的。第 8.5/5 节。 “初始化器为空括号集的对象,即 (),应进行值初始化。”
标签: c++ constructor value-initialization