【发布时间】:2015-08-16 10:12:51
【问题描述】:
当我使用 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) ...;
或者编译器会正确地猜到我想对无符号整数使用操作?
【问题讨论】:
-
为什么不简单地
a / (size_t)2? -
@Eregrith:因为它并不“简单”。这既困难又丑陋。
-
阅读integral conversions 可能会对您有所帮助。
-
@AnT 有什么难的?将 2 转换为
size_t? -
@Eregrith:使用显式类型名称轻松实现类型无关的杂乱代码是很困难的,至少因为它让人跨越了“丑化”代码的心理障碍。最重要的是,输入整个
(size_t)后缀就足够了,它产生的热量多于光。
标签: c++ c type-conversion literals