内置数据类型与C ++中的用户定义数据类型

时间:2011-09-10 10:09:48

标签: c++ constructor

  

构造函数从灰尘构建对象。

这是我最近多次见过的声明。

在初始化内置数据类型变量时,该变量也必须“由灰尘构建”。那么,是否还有内置类型的构造函数?

此外,编译器如何以不同的方式处理BUILT IN DATATYPE和USER DEFINED CLASS,同时为每个创建实例? 我的意思是关于构造函数,析构函数等的细节。

关于堆栈溢出的这个查询是关于相同的,它有一些非常有趣的细节,最有趣的是Bjarne所说的......!

Do built-in types have default constructors?

4 个答案:

答案 0 :(得分:5)

简单地说,根据C ++标准:

  

12.1构造函数[class.ctor]

     

2. 构造函数用于初始化其类类型的对象......

所以没有,内置数据类型(假设您正在谈论像intfloat这样的事情)没有构造函数,因为它们不是类类型。类类型是这样指定的:

  

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);