1
13
从ANSI-ISO-IEC 1488—2003,P.78(C++ 03):
这似乎表明指针差等于对象大小。 如果我们从增加指向标量a的指针并将a转换为数组中删除了ub'ness:
那么这个看起来不错。有关对齐要求的条款与脚注一致,如果对齐要求总是可以被对象的大小整除。 更新: 有趣。正如大多数人可能知道的,gcc允许将类型的显式对齐指定为扩展。但我不能用它破坏op的“sizeof”方法,因为gcc拒绝编译它:
消息是
|
2
4
这意味着5.7/5可以不使用ub。最后,5.7/6中的75条评论为
在生产代码中应该使用
|
3
2
不,这个代码在每个平台上都不能像您期望的那样工作。至少在理论上,可能有一个平台,例如24位整数(=3字节)但32位对齐。对于(旧的或更简单的)平台,这样的对准并非不典型。然后,代码将返回4,但sizeof(int)将返回3。 但我不知道真正的硬件是这样的。实际上,您的代码将在大多数或所有平台上工作。 |
4
2
它不是100%可移植的,原因如下:
免责声明:我不确定上面是否有C++。 |
5
1
为什么不只是:
|
6
1
它可能是实现定义的。 我可以想象一个(假设的)系统,其中sizeof(int)小于默认对齐。
这样说才安全
|
7
0
上面的代码可以方便地计算
|
8
0
是的,它给了你相当于
|
9
0
有一场关于 similar question . 查看评论 my answer 对于这个问题,有些人提出了这样的问题:为什么这不仅是不可移植的,而且是标准中未定义的行为。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |