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

Is it technically correct to say variables and constants are objects of data types?

本文关键字:在技术上 对象 变量 常量 数据类型      更新时间:2023-10-16

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

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

int a;
float f;

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

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

1 对象是一个存储区域。[注意:函数不是对象,不管它是否以这种方式占用存储空间对象。对象由定义(3.1)创建,由new-expression(5.3.4)或在需要时由实现(12.2)提供。对象的属性在创建对象时确定。一个对象可以有一个名字(第3条)。一个对象有一个存储期限(3.7)影响其寿命(3.8)。对象有一个类型(3.9)。术语对象类型指的是对象所属的类型创建 .

[intro.object]

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

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

然而,c++是一种多范式语言——它支持多种编程模型。c++语言对"对象"一词的定义与编译器编写者的定义一样广泛:对象是一个存储区域,可以在该存储区域上执行各种操作。操作由对象的类型定义。有一组定义良好的操作可以应用于int类型的对象,所以当你知道你在处理int类型的对象时,你和编译器知道你可以用它做什么,通过暗示,你不能用它做什么。

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

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

从语言提供的意义上说,

intfloat基本数据类型。本例中的Object类型将是derived类型,因为它是从基本类型创建的。

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

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

and "变量和常量是数据类型的对象":

虽然你可以在c++标准中找到短语"类型的对象"(如"类型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类型的对象"

我想这是符合标准的,尽管更精确地说,我们必须包括像"表示"这样的东西,例如:a表示数据类型为int的对象。

但我认为没有歧义,所以我认为可以。