我正在和我的朋友谈论这两段代码。他说 python 会终止,而 C++ 不会。
Python:
arr = [1, 2, 3]
for i in range(len(arr)):
arr.append(i)
print("done")
C++:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> arr{1,2,3};
for(int i = 0; i < arr.size(); i++){
arr.push_back(i);
}
cout << "done" << endl;
return 0;
}
我对此提出了挑战,并在 2 台计算机上运行了它。第一个内存不足(错误分配),因为它有 4gb 的内存。我的 mac 是 12gb 的 ram,它能够正常运行和终止。我认为它不会永远运行,因为向量中的 size() 类型是无符号整数。由于我的 Mac 是 64 位的,我认为它可以存储 2^(64-2)=2^62 个整数(这是真的),但由于某种原因,大小的无符号整数是 32。
这是 C++ 编译器中的一些错误,它不会将 max_size() 更改为相对于系统的硬件?溢出导致程序终止。还是出于其他原因?