【发布时间】:2009-08-12 22:10:05
【问题描述】:
我正在处理一些包含表单表达式的代码
-(sizeof(struct foo))
即size_t 的否定,我不清楚 C 和 C++ 标准对编译器的要求是什么。具体来说,从这里和其他地方环顾四周,sizeof 返回一个 size_t 类型的无符号整数值。在否定无符号整数时,我找不到任何明确的指定行为参考。有没有,如果有,是什么?
编辑:好的,所以关于无符号类型的算术有一些很好的答案,但不清楚这实际上是否如此。当这否定时,它是对无符号整数进行操作,还是转换为有符号类型并对其进行处理?从标准中期望的行为“想象它是相似幅度的负数,然后对无符号值应用'溢出'规则”?
【问题讨论】:
-
我想知道这种东西被带到这个世界的原因吗?
-
@eJames:可能不是,但这样做肯定有“公平”的理由,例如使用负值来表示对幅度的不同解释。在有人指责我过早优化之前,这 a) 不是我写的代码; b) 是并行编程环境运行时的一部分,其中一个应用程序占 NSF 超级计算机上约 20% 的时间。换句话说,每个周期都很重要。
-
它是在做否定还是减法的右边?整个语句可能会有用。
-
这是一个否定。我会说清楚的。
-
但是在 C 语言中仅仅做一个否定并没有做任何事情——它可能会被优化掉。否定的实际用途是什么?您确定可以发布使用它的完整声明吗?
标签: c++ c sizeof unsigned size-t