R..*_*R.. 15
至少有两个地方signed关键字不是空操作:
With char:“plain”的签名char是实现定义的。在它是无符号类型的实现上,signed char需要获取有符号的变体。即使char是有符号类型,signed char,char,和unsigned char是完全不同的类型。
使用位域:没有显式签名的位域成员具有实现定义的签名。例如,在
struct foo {
int b:1;
};
Run Code Online (Sandbox Code Playgroud)
的值范围b可能是 { -1, 0 } 或 { 0, 1 } 取决于实现。如果您想确保获得签名版本,则需要signed关键字。请注意,虽然标准对此不是很清楚,但在流行的实现上,这也适用于typedef:如果位域成员使用typedef不包含显式签名的定义类型,则实现定义的签名(在 GCC 上,由 设置-fsigned-bitfields)也适用于那里。这意味着int32_t应使用signed关键字定义类似类型,以避免在位域中使用时出现非常糟糕的意外行为。
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |