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]


我无法想象为什么它不适合说intlong。什么原因?你能澄清一下吗?

最佳答案

一个示例可能是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/

10-13 03:42