C++ 安全倒数到零"auto"整型
c++ safe counting backwards to zero for "auto" integral type
让我们expression
是某种类型是积分的,在编译时已知,也许是有符号的,也许是无符号的。按照以下方式倒数到零是否安全(假设表达式的实际值为非负数(?
for(auto i = expression; i!= static_cast<decltype(i)>(-1); --i) {
//something
}
它是安全的。但在我看来,它很难阅读,安全性/正确性不一定直观(毕竟,你为什么要问其他(。我提议:
for(auto i = expression; i-- > 0;)
(也称为"转到"运算符,格式不同时:i --> 0
(。
编辑:如前所述,这与所讨论的循环的行为并不完全相同。expression
的初始值不会迭代,而是从 expression - 1
开始循环(因此将有恰好expression
迭代次数(。
这实际上可能非常危险,因为您允许expression
可能是负的。如果发生这种情况,您的代码将开始从 expression
的值计数到负无穷大,这是未定义的行为(没有人知道i
达到整数限制后会发生什么(。你基本上有一个没有中断子句的 for 循环。
相关文章:
- C 字符串返回字符串的整数/双精度/长整型值
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将长整型值打印为带有前导零的十六进制
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 将整型常量映射到类型
- 将元组和整型实例合并到引用元组中
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 为什么C++不允许两个同名的函数/类模板,区别仅在于非类型模板参数(整型)的类型?
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 直接初始化无符号短整型的标准行为
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 无符号和有符号短整型的位宽
- 将整型转换为浮点型时检测溢出
- 环礁和(长整型)的区别?
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?
- 将逗号格式化为长整型整数
- C++ 安全倒数到零"auto"整型