N3797::3.9/4 [basic.types]
:
N3797::3.9.1 [basic.fundamental]
说:
考虑以下结构:
struct A
{
char a;
int b;
}
我认为对于
A
,由于实现添加了填充,因此对象表示的所有位都不参与值表示。但是其他基本面类型呢?标准说:
N3797::3.9.1 [basic.fundamental]
我无法想象为什么它不适合说
int
或long
。什么原因?你能澄清一下吗? 最佳答案
一个示例可能是Unisys大型机,其中int
具有48
位,但只有40个参与值表示(且INT_MAX
为2 ^ 39-1);这
其他的必须为0。我想象任何带有标签的机器
架构也会有类似的问题。
编辑:
只是一些进一步的信息:Unisys大型机是
可能仅有的剩下的真正的架构
异国情调:Unisys天秤座(前Burroughs)有一个48位字,使用带符号
整数的幅度,并具有标记的架构,其中
数据本身包含有关其类型的信息。这
Unisys Dorado是Univac的前任产品:36位用户的补充产品(但没有
保留位用于标记)和9位字符。
但是据我了解,Unisys正在逐步淘汰它们(或
已在去年淘汰了它们),而支持基于Intel的产品
系统。一旦消失,几乎所有系统都将成为
2的补码,32或64位以及IBM大型机以外的所有主机
将使用IEEE float poing(并且IBM正在搬入或搬入
那个方向)。所以不会有任何动机
继续用特殊措辞支持他们的标准;
最后,在lesat的几年中,C/C++可能
遵循Java路径,并在其所有路径上加上一个表示形式
基本数据类型。
关于c++ - 实例和值表示之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26241397/