c++ - size_t除以int类型转换规则

标签 c++ c type-conversion literals

当我对 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/

相关文章:

c++ - 在 switch 语句中从 int 到 enum 类的隐式转换

用于 XML 模式到实例转换的 Java 库

php - 为什么 C++ 应用程序不能创建 php、html 和 css 等接口(interface)?

c++ - C++如何选择同名成员函数?

c - 为什么此 if 行出现段错误?

c++ - 为什么wcstok_s函数的第三个参数是维度指针?

Microsoft Visual Studio 2010 中的 C 预处理器问题

php - 将对象的对象转换为对象数组(PHP、Laravel)

c++ - 在 OpenGL 中实现固定坐标系

c# - 从 .tlb 文件创建互操作 dll