我希望你能接受这个假设性的问题,即使这对任何人来说可能从来都不是问题。
我曾经像这样编写我的 for 循环
for (size_t i = 0; i < container.size(); ++i)
为了避免与比较有符号和无符号相关的警告,但是在尝试让 i
参与导致负数的操作中被咬了太多次之后,我开始这样写它们,将大小转换为 int 也可以避免该警告:
for (int i = 0; i < (int)container.size(); ++i)
现在假设有一种情况 container.size() > INT_MAX
并且在循环中我们有类似的东西。
for (int i = 0; i < (int)container.size(); ++i) {
size_t x = 0;
while (i - x++ > INT_MIN) {
// do stuff
}
}
我们需要 i
进行签名,但我们还需要 i
能够表示大于 INT_MAX
的数字。我知道这里使用 long
的 super 简单答案,但是如果您必须运行循环 >,即使您使用
次。long long
最终也会出现同样的问题LLONG_MAX
在这种情况下,您最终将被迫为能够表示如此大的数字的计数器变量使用无符号类型,但您仍然需要能够检查这种情况
while (i - x++ > LLONG_MIN)
你是怎么做到的? (假设您实际上有理由运行一个循环 9 quintillion 次)。
最佳答案
我想一个合理的方法是使用一些 bignum library .一种不太合理但可能更有趣的方法是自行实现所需内容。
关于c++ - for 循环需要运行 LLONG_MAX 次,但计数器变量也需要表示有符号数。你用什么类型的柜台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40367890/