C++中对象是存储位置还是值?
Is an object a storage location or a value in C++?
在 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
给出)和 alignment(由运算符alignof
给出)为类型。存储区域有一个地址(由运算符&
给出)并保存一个表示,它是一个字节序列,一个子集其中代表一个值。一个对象最终有一个 lifetime,它开始于它的初始化结束,结束于它的终结开始或者当它的存储区域被另一个对象释放或重用时。
在其生命周期之外使用对象是未定义的行为。
由于程序员可以随时通过直接访问对象的字节来更改对象的表示形式,因此对象可以包含有效值,也可以不包含有效值。基本类型的无效值称为 陷阱表示,使用包含此类陷阱表示的对象是未定义的行为。
所以对象既不是存储区域也不是值,而是一个复杂的东西,在C语言中叫做对象
在 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
给出)和 alignment(由运算符alignof
给出)为类型。存储区域有一个地址(由运算符&
给出)并保存一个表示,它是一个字节序列,一个子集其中代表一个值。一个对象最终有一个 lifetime,它开始于它的初始化结束,结束于它的终结开始或者当它的存储区域被另一个对象释放或重用时。
在其生命周期之外使用对象是未定义的行为。
由于程序员可以随时通过直接访问对象的字节来更改对象的表示形式,因此对象可以包含有效值,也可以不包含有效值。基本类型的无效值称为 陷阱表示,使用包含此类陷阱表示的对象是未定义的行为。
所以对象既不是存储区域也不是值,而是一个复杂的东西,在C语言中叫做对象