说变量和常量是数据类型的对象在技术上是否正确?

时间:2013-04-27 10:43:05

标签: c++ c

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

我想知道对于这个

的正确解释是什么
int a;

float f;

在这里,我们可以说aint类型的对象,而ffloat类型的对象吗?

4 个答案:

答案 0 :(得分:12)

根据段落§1.8,ab都是相应类型的对象。

  

1 对象是存储区域。 [注意:函数不是对象,   无论它是否以某种方式占据存储空间   对象呢。 -end note]一个对象是由定义(3.1)创建的   新表达式(5.3.4)或需要时通过实现(12.2)。   创建对象时确定对象的属性。   对象可以有一个名称(第3条)。对象具有存储持续时间   (3.7)影响其寿命(3.8)。对象具有类型(3.9)。   术语对象类型是指对象所使用的类型   创建

     

[intro.object]

这些变量符合上述引用定义。

答案 1 :(得分:6)

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

@Patashu使用面向对象编程的定义:一个对象是一个带有方法等的东西。这非常好。

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

答案 2 :(得分:1)

我会说是的。 数据对象只是一个包含值或值组的存储区域。 int afloat f都同意此定义。如果我们想要看到它们与面向对象语言中的“传统”对象之间的差异,我们应该展示数据类型的概念,这有助于编译器为该数据对象分配存储,并解释它访问它时的内存值。

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

intfloat基本数据类型,因为它们是由语言提供的。此示例中的Object类型为derived类型,因为它是从基本类型创建的。

数据类型可以归类为其他(通常是重叠的)组:例如,可以说Object用户定义的类型;并且int标量类型,因为它代表单个数据值。

答案 3 :(得分:0)

<强>

(或者说“可以说不是”)

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

虽然您可以在C ++标准中找到短语“type of object”(如“T类型的对象”[basic.def.odr] / 5)和C标准(例如“wchar_t类型的对象”3.7)。 3),人们可以争论在你的例子中使用术语“变量”,至少在C ++中是这样的:

[基本] / 6

  

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

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

  • 类型为int
  • 的对象
  • 一个变量,名称answer,指的是上面的对象
  • 一个变量,名称deepthought,指的是同一个对象

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


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

符合标准的AFAIK,虽然更准确,但必须包含类似“表示”的东西,例如“a表示数据类型为int”的对象。

但我认为没有歧义,因此我认为没问题。