C++ 在C+;中声明向量时大小参数溢出+; int n=int_MAX; 向量v(n*n);

C++ 在C+;中声明向量时大小参数溢出+; int n=int_MAX; 向量v(n*n);,c++,vector,overflow,C++,Vector,Overflow,这会导致长度为n^2的向量v还是会发生溢出?有一个由定义的向量大小限制,并且您在该限制之上 有关大小类型的固有限制,请参阅此贡献 你可以试试 int n = INT_MAX; vector<int> v (n*n); std::vector v(std::numeric_limits::max()); 或 std::vector v(std::numeric_limits::max()); 虽然无法保证您的平台可以为足够大的int数组分配内存,以容纳这么多的项。将出现未定义的行

这会导致长度为n^2的向量v还是会发生溢出?

有一个由定义的向量大小限制,并且您在该限制之上

有关大小类型的固有限制,请参阅此贡献

你可以试试

int n = INT_MAX;
vector<int> v (n*n);
std::vector v(std::numeric_limits::max());

std::vector v(std::numeric_limits::max());

虽然无法保证您的平台可以为足够大的
int
数组分配内存,以容纳这么多的项。

将出现未定义的行为。向量v((长)(n*n))会起作用吗?如果您有7.37869762948382*10^19字节的RAM…不会,
n*n
导致有符号整数溢出,根据定义,这是未定义的行为。您的代码不能保证工作。用unsigned n=UINT\u MAX试试看,溢出就要发生了。我应该更清楚我想从这个问题中得到什么。我实际上想知道,如果您有一些int n>sqrt(int_MAX)并如上所述声明了v,那么v是否会被构造成所需的大小。也就是说,是执行整数乘法,还是执行更灵活的乘法?显然我没有1000000000GB的内存,鲍姆·米特·奥根。没有人知道,但实际上我不认为这是一个问题。这是一个关于C++的语法和行为的问题,所以感谢你的0x499 602D2来得到我的观点。我不能看到任何问题的矢量1844 67407370955 1615整数。
std::vector<int> v(std::numeric_limits<unsigned long>::max());
std::vector<int> v(std::numeric_limits<unsigned long long>::max());