说变量和常量是数据类型的对象在技术上正确吗?
Is it technically correct to say variables and constants are objects of data types?
可以说变量和常量是数据类型的对象吗?
我想知道这是什么正确的解释
int a;
float f;
这里,我们可以说a
是int
类型的对象,f
是float
类型的对象吗?
是
根据§1.8,a
和b
都是对应类型的对象。
1 对象是一个存储区域。[注意:函数不是对象,不管它是否以这种方式占用存储空间对象。对象由定义(3.1)创建,由new-expression(5.3.4)或在需要时由实现(12.2)提供。对象的属性在创建对象时确定。一个对象可以有一个名字(第3条)。一个对象有一个存储期限(3.7)影响其寿命(3.8)。对象有一个类型(3.9)。术语对象类型指的是对象所属的类型创建 .
[intro.object]
a
和f
分别是类型为int
和float
的对象。是的,这与@Patashu所说的相矛盾,那是因为我们使用了不同的"对象"定义。
@Patashu使用了面向对象编程的定义:对象是一个带有方法的东西,等等。这很好。
然而,c++是一种多范式语言——它支持多种编程模型。c++语言对"对象"一词的定义与编译器编写者的定义一样广泛:对象是一个存储区域,可以在该存储区域上执行各种操作。操作由对象的类型定义。有一组定义良好的操作可以应用于int
类型的对象,所以当你知道你在处理int
类型的对象时,你和编译器知道你可以用它做什么,通过暗示,你不能用它做什么。
我会说是的。数据对象只是一个存储区域,其中包含一个值或一组值。int a
和float f
都同意这个定义。如果我们想看到这些对象和面向对象语言中的"传统"对象之间的区别,我们应该展示数据类型的概念,它帮助编译器为该数据对象分配存储,并在访问时解释其内存值。
c++中的每个数据对象都必须有一个数据类型(数据对象和数据类型的标识符在变量/常量声明中建立)。在数据类型的分类中,我们看到int a;
和Object a;
不是"完全相同":
int
和float
是基本数据类型。本例中的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的对象。
但我认为没有歧义,所以我认为可以。
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 在容器上移动分配:以前包含的对象的状态
- C++包装库:在堆栈上分配C++ C 中的对象
- 在 win32 上生成 R 包:无法加载共享对象 (.dll)
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 使用在堆栈上创建的对象调用虚拟函数
- C++ 在地图上循环 - 消失的对象
- 在多个对象上执行同一语句的零成本抽象
- 在地图上启动对象的正确方式
- 对于琐碎的对象,在"this"上调用新放置是否安全?
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 使用 new in C++(在 Windows 上)分配大于 2GB 的单个对象
- 如何在屏幕上显示对象列表?
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 这在技术上可能是可能的
- 依赖GCC/LLVM的"-fexceptions"在技术上是未定义的行为吗?
- 在技术上是否可以创建 Java 虚拟机的映像文件并使用它来更快地启动 Java 应用程序
- 用于在堆上生成对象的函数式编程技术
- 说变量和常量是数据类型的对象在技术上正确吗?