8

可以说变量和常量是数据类型的对象吗?

我想知道对此的正确解释是什么

int a;

float f;

在这里,我们可以说ais an object of typeint并且fis an object of typefloat吗?

4

4 回答 4

12

是的

根据第 1.8 段,两者ab都是其相应类型的对象。

1 对象是一个存储区域。[注意:函数不是对象,无论它是否像对象那样占用存储空间。—尾注]对象由定义(3.1)、新表达式(5.3.4)或实现(12.2)在需要时创建。对象的属性是在创建对象时确定的。一个对象可以有一个名称(第 3 条)。对象具有影响其生命周期 (3.8) 的存储持续时间 (3.7)。一个对象有一个类型(3.9)。 术语对象类型是指创建对象的类型

[介绍对象]

并且这些变量符合上面引用的定义。

于 2013-04-27T10:58:31.327 回答
6

af分别是 typeint和 type的对象float。是的,这与@Patashu 所说的相矛盾,那是因为我们使用了不同的“对象”定义。

@Patashu 使用面向对象编程的定义:对象是具有方法等的东西。这很好。

但是,C++ 是一种多范式语言——它支持多个编程模型。C++ 语言定义使用编译器编写者使用的更广泛意义上的“对象”一词:对象是一个存储区域,具有可以在该存储上执行的各种操作。操作由对象的类型定义。有一组定义明确的操作可以应用于 type 的对象int,所以当你知道你正在处理一个int你时,编译器知道你可以用它做什么,并且暗示你可以做什么不用管它。

于 2013-04-27T10:58:24.383 回答
1

我会说是的。数据对象只是一个包含一个值或一组值的存储区域。两者都int a同意float f这个定义。如果我们想看看这些和面向对象语言中的“传统”对象之间的区别,我们应该展示数据类型的概念,它帮助编译器为该数据对象分配存储空间,并在访问它时解释它的内存值。

C++ 中的每个数据对象都必须有一个数据类型(数据对象和数据类型的标识符在变量/常量声明中建立)。在数据类型的分类中,我们看到了这一点int a;,并且Object a;不“完全相同”:

int并且float基本数据类型,因为它们是由语言提供的。Object此示例中的类型将是一个类型derived,因为它是从基本类型创建的。

数据类型可以分为其他经常重叠的组:例如,可以说它Object用户定义的类型;那int是一种标量类型,因为它表示单个数据值。

于 2013-04-27T11:19:26.860 回答
0

(或者更确切地说“可以说不是”)

广告“变量和常量是数据类型的对象”

尽管您可以在 C++ 标准(如“T 类型对象”[basic.def.odr]/5)和 C 标准(例如“wchar_t 类型对象”3.7.3)中找到短语“类型对象”,人们可能会争论在您的示例中使用“变量”一词,至少在 C++ 中:

[基本]/6

变量是由非静态数据成员或对象以外的引用的声明引入的。变量的名称表示引用或对象。

所以,int answer = 42; int& deepthought = answer;介绍:

  • 类型的对象int
  • 一个变量 name answer,指的是上面的对象
  • 一个变量 name deepthought,指向同一个对象

但是参考AFAIK不是对象(不一定是)-因此有人可能会争辩说变量不一定是对象。当然,它们并不相同,例如动态内存分配。


广告“a是数据类型int的对象,f是float类型的对象”

符合标准的 AFAIK,虽然更准确地说,必须包括“表示”之类的内容,例如“a表示数据类型 int 的对象”。

但我认为没有歧义,因此我认为它可以。

于 2013-04-27T15:09:06.087 回答