HCS*_*CSF 2 c++ x86 g++ clang language-lawyer
uint8_t
,uint16_t
,uint32_t
,uint64_t
?如果是,那么定义的行为是什么(来自C++标准的摘录非常感谢)int8_t
,int16_t
,int32_t
,int64_t
?(摘自C++标准非常感谢)我看到这篇文章的第一个答案提到我的问题#1,它是用C标准定义的,虽然他没有引用它,我在C++标准中找不到任何东西.
=================
更新1:
因为它是错误的术语而删除了每次"下溢"(感谢@ach).添加了#5来表达我对"下溢"的真正含义(错误)
为了创建规范,这里有一些规范性规范(引自最新的C++草案):
无符号整数应遵守算术模2n的定律,其中n是该特定整数大小的值表示中的位数.(44)这意味着无符号算术不会溢出,因为无法用结果无符号整数类型表示的结果以比模式生成的无符号整数类型所表示的最大值大1的数量为模.
如果在评估表达式期间,结果未在数学上定义或未在其类型的可表示值范围内,则行为未定义.
顺便说一句,它们都不是特定于实现的,并且编译器积极地利用上溢/下溢进行优化.例如,如以下代码段所示:
void a();
void b();
void foo(int k) {
int z = k+1;
if (z < k) {
a();
} else {
b();
}
}
Run Code Online (Sandbox Code Playgroud)
https://gcc.godbolt.org/z/0re-nM - 分支被删除,即使在真实平台上由于模2表示,z
实际上可能变得比较小k
.
归档时间: |
|
查看次数: |
279 次 |
最近记录: |