内置types是否有默认的构造函数?

在读完这篇文章之后,我提出了一个观点: int ()产生0,因为临时int是初始化的值,而不是因为int()调用int()的默认构造函数。 (根据我的理解,这篇文章有缺陷。)

我也说过,原始(内置)types没有构造函数。 原作者要求我检查部分$ 10.4.2(TC ++ PL)的内容

内置types也有默认的构造函数($ 6.2.8)

但我仍然认为“C ++”语句甚至允许内置types(原始types)具有默认的构造函数。 是有缺陷的(按照C ++ 03)。

我认为TC ++ PL中的Bjarne混合了“构造函数如符号ie () ”与实际的构造函数调用。 Bjarne写这本书的时候并没有引入价值初始化,对吧? 那么TC ++ PL中的文本是不正确的,按照C ++ 98和C ++ 03?

你们有什么感想?

编辑

我亲自(通过邮件)向Bjarne询问了TC ++ PL中有缺陷的文本,这是他的回答

我想你混淆了“实际构造函数调用”与概念上有一个构造函数。 内置types被认为是有构造函数 (无论标准用来描述它们的行为的话)。

构造函数是一个成员函数(构造函数在C ++标准的第12章中有详细说明,它涵盖了构造函数和析构函数等特殊的成员函数)。

一个成员函数只能被定义为一个类的types(C ++ 03 9.3 / 1表示“在一个类的定义中声明的函数,不包括用朋友说明符声明的函数被称为该类的成员函数”)。

所以非types(包括基本types,数组types,引用types,指针types和枚举types)没有构造函数。

我没有“C ++编程语言”的副本来读取“内置types也有默认构造函数”的引用的上下文,但是我猜测Stroustrup要么使用“构造函数”技术上的意义,或术语的含义或在标准中使用它的方式在书的出版时间和语言标准化之间发生变化。 我猜想前者比后者更可能。

简单的答案:技术上没有。

长答案:

没有。
但是 ,用于初始化它们的语法使得它们看起来像是由默认的构造函数或默认的拷贝构造函数构造的。

 int x(5); // Looks like a constructor. Behaves like one: x is initialized. int y(); // Fail. Actually a function declaration. // BUT int z = int(); // Looks like a constructor. Behaves like a constructor (0 init). int a(b); // Again. 

所以在技术上没有基本的PODtypes的构造函数。 但是,对于所有的意图和目的,它们就像复制构造函数和默认构造函数一样(用花括号初始化时)。

如果它看起来像一只鸭子,嘎嘎叫鸭子,那么它的鸭子就像鸭子一样。

正如其他人所指出的那样,该标准在一些情况下与TC ++ PL相矛盾,通常与术语有关。 Bjarne Stroustrup自己总结了这个情况:

(…) 但是,[TC ++ PL]不是参考手册或标准文本。 如果你需要100%精确和完整的信息,你必须查阅ISO C ++标准的文本。 (……)

Interesting Posts