可以说变量和常量是数据类型的对象?
我想知道对于这个
的正确解释是什么int a;
float f;
在这里,我们可以说a
是int
类型的对象,而f
是float
类型的对象吗?
答案 0 :(得分:12)
根据段落§1.8,a
和b
都是相应类型的对象。
1 对象是存储区域。 [注意:函数不是对象, 无论它是否以某种方式占据存储空间 对象呢。 -end note]一个对象是由定义(3.1)创建的 新表达式(5.3.4)或需要时通过实现(12.2)。 创建对象时确定对象的属性。 对象可以有一个名称(第3条)。对象具有存储持续时间 (3.7)影响其寿命(3.8)。对象具有类型(3.9)。 术语对象类型是指对象所使用的类型 创建强>
[intro.object]
这些变量符合上述引用定义。
答案 1 :(得分:6)
a
和f
分别是int
类型和float
类型的对象。是的,这与@Patashu所说的相矛盾,那是因为我们使用了不同的“对象”定义。
@Patashu使用面向对象编程的定义:一个对象是一个带有方法等的东西。这非常好。
然而,C ++是一种多范式语言 - 它支持多种编程模型。 C ++语言定义在编译器编写者使用的更广泛意义上使用“对象”一词:对象是存储区域,具有可在该存储上执行的各种操作。操作由对象的类型定义。有一组明确定义的操作可以应用于int
类型的对象,所以当你知道你正在处理int
时,编译器会知道你可以用什么来做它暗示着你不能用它做什么。
答案 2 :(得分:1)
我会说是的。 数据对象只是一个包含值或值组的存储区域。 int a
和float f
都同意此定义。如果我们想要看到它们与面向对象语言中的“传统”对象之间的差异,我们应该展示数据类型的概念,这有助于编译器为该数据对象分配存储,并解释它访问它时的内存值。
C ++中的每个数据对象都必须具有数据类型(数据对象的标识符和数据类型在变量/常量声明中建立)。在数据类型分类中,我们看到int a;
和Object a;
不是“完全相同”:
int
和float
是基本数据类型,因为它们是由语言提供的。此示例中的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”的对象。
但我认为没有歧义,因此我认为没问题。