构造函数从灰尘构建对象。
这是我最近多次见过的声明。
在初始化内置数据类型变量时,该变量也必须“由灰尘构建”。那么,是否还有内置类型的构造函数?
此外,编译器如何以不同的方式处理BUILT IN DATATYPE和USER DEFINED CLASS,同时为每个创建实例? 我的意思是关于构造函数,析构函数等的细节。
关于堆栈溢出的这个查询是关于相同的,它有一些非常有趣的细节,最有趣的是Bjarne所说的......!
答案 0 :(得分:5)
简单地说,根据C ++标准:
12.1构造函数[class.ctor]
2. 构造函数用于初始化其类类型的对象......
所以没有,内置数据类型(假设您正在谈论像int
和float
这样的事情)没有构造函数,因为它们不是类类型。类类型是这样指定的:
9个班级[class]
1。类是一种类型。它的名称变成了类名(9.1) 它的范围。
class-name: identifier template-id
使用类说明符和详细说明类型说明符(7.1.5.3) 制作类名。一个类的对象由一个(可能是 空的)成员序列和基类对象。
class-specifier: class-head { member-specification (opt) } class-head: class-key identifieropt base-clauseopt class-key nested-name-specifier identifier base-clauseopt class-key nested-name-specifieropt template-id base-clauseopt class-key: class struct union
由于内置类型没有这样声明,因此它们不能是类类型。
那么如何创建内置类型的实例?将内置实例和类实例引入存在的一般过程称为初始化,在C ++标准(8.5)中有一个巨大的8页部分,其中列出了令人难以忍受的细节。您可以在第8.5节中找到Here's some of the rules。
答案 1 :(得分:2)
如前所述,内置数据类型没有构造函数。
但您仍然可以使用类似构造的初始化语法,例如int i(3)
或int i = int()
。据我所知,它被引入语言以更好地支持通用编程,即能够编写
template <class T>
T f() { T t = T(); }
f(42);
答案 2 :(得分:1)
答案 3 :(得分:0)
Built In数据类型(基本类型,数组,引用,指针和枚举)没有构造函数。
构造函数是成员函数。只能为类类型
定义成员函数C ++ 03 9.3 / 1:
“在类的定义中声明的函数,不包括那些用朋友说明符声明的函数,称为该类的成员函数”。
在某些语法(下面给出)中多次使用POD类型可能会给人一种印象,即它们是使用构造函数或复制构造函数构造的,但它只是初始化而没有任何两种语法。
int x(5);