当我对 size_t 类型(或 unsigned long)进行算术运算时,我应该多小心地用类型字面量修饰整数常量。例如,
size_t a = 1111111;
if (a/2 > 0) ...;
当编译器进行除法时会发生什么?它将 2 视为整数还是无符号整数?如果是前者,那么 (unsigned int)/(int) 的结果类型是什么?
我是否应该始终小心地编写 'u' 文字
if (a/2u > 0) ...;
for (a=amax; a >= 0u; a -= 3u) ...;
或者编译器会正确地猜测我想使用无符号整数的操作?
最佳答案
2
确实被视为 int
,然后隐式转换为 size_t
。在混合运算 size_t/int
中,无符号类型“wins”和有符号类型被转换为无符号类型,假设无符号类型至少与有符号类型一样宽。结果是无符号的,即 size_t
在你的情况下。 (有关详细信息,请参阅 Usual arithmetic conversions)。
最好将它写成a/2
。没有后缀,没有类型转换。尽可能保持代码与类型无关。类型名称(和后缀)属于声明,而不是语句。
关于c++ - size_t除以int类型转换规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30599130/