c++ - C++中对象是存储位置还是值?

标签 c++ object language-lawyer storage terminology

在 C++ 中,对象是存储位置(容器)还是(内容)?

这句话来自[intro.object]/1 ,可以假设它是一个值(大胆强调我的):

An object occupies a region of storage in its period of construction ([class.cdtor]), throughout its lifetime, and in its period of destruction ([class.cdtor]).

这句话来自[basic.types.general]/2 ,可以假设它是一个存储位置(大胆强调我的):

For any object (other than a potentially-overlapping subobject) of trivially copyable type T, whether or not the object holds a valid value of type T, the underlying bytes ([intro.memory]) making up the object can be copied into an array of char, unsigned char, or std​::​byte ([cstddef.syn]).

最佳答案

一个对象是一个实体,它有一个类型(一组可以对其执行的操作)并占用一些分配的<具有适当大小(由运算符sizeof 指定)和对齐(由运算符 指定)的strong>存储区域 alignof) 为类型。存储区域有一个地址(由运算符&给出)并保存一个表示,它是一个字节序列,其中的一个子集表示。一个对象最终有一个生命周期,它从它的初始化结束时开始,到它结束时结束,或者当它的存储区域被另一个对象释放或重用时结束。

在其生命周期之外使用对象是未定义的行为。

由于程序员可以随时通过直接访问对象的字节来更改对象的表示形式,因此对象可以包含有效值,也可以不包含有效值。基本类型的无效值称为陷阱表示,使用包含此类陷阱表示的对象是未定义的行为。

所以对象既不是存储区域也不是值,而是一个复杂的东西,在C语言中叫做对象。

关于c++ - C++中对象是存储位置还是值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69749883/

相关文章:

c++ - 方括号重载 => 没有运算符匹配操作数

c++ - 如何在 C++ 中为 cin.ignore() 指定多个分隔符?

javascript - 如何使用默认值解构具有空值的嵌套对象

javascript - 连接字符串作为对象属性

c - 来自 UINT32_C、UINTN_C 的意外类型

c++ vector assign() 方法经常失败

c++ - 抽象类和对象

关于标识符链接的混淆

c++ - 在 C++ 标准中,当违反 "shall"要求时指定发生什么?

c++ - 在 OpenGl 中创建模型类