初值i不等于5,输出数不清。
int main() {
vector<int> nums = {1, 2, 1};
auto size = nums.size();
for(auto i = 2 * size - 1; i >= 0; i--) {
// do_stuff()
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}发布于 2021-10-27 08:52:38
您的问题源于这样一个事实,即i的类型是无符号的,因此i >= 0始终是真的,从而使循环无限。
i被推断为与size相同的类型,而size被推断为size_t类型,因为vector::size()返回size_t。
由于上述和无符号整数溢出,您的循环是无限的。打印(*)
5 4 3 2 1 0 4294967295 4294967294 4294967293 ... 3 2 1 0 4294967295 4294967294 ...无限和更远。
(*)如果size_t在您的平台上是32位的话。
发布于 2021-10-27 08:50:52
因为nums.size()是一个std::size_t,它是unsigned int的别名,所以size是unsigned int。
auto i = 2 * size - 1;,因为size是一个unsigned int,所以编译器决定让i成为unsigned int,所以i >= 0总是正确的。试图减少它会导致(到4294967295)一个包装,并减少它。
https://stackoverflow.com/questions/69735443
复制相似问题