所以我遇到了一个问题,无法创建一个具有可变大小的新数组(该变量被声明为const int
)
这是代码
#include <iostream>
#include <string>
int newArraySize;
int main ()
{
std::cin >> newArraySize;
int const fin = newArraySize;
int deduped[fin]; // Here is the error
}
我收到的错误是
错误:表达式必须具有常量值
我尝试将其转换为常量,但仍然没有运气(同样的错误)
int const fin = const_cast<int const&>(newArraySize);
int deduped[fin];
C++ 有(令人困惑)two的形式const
. Your fin
是一种类型,但是other要使某些内容达到数组的大小,需要类型。另一种类型新称为constexpr
,并且曾经是“编译时常量”。您会看到,所有数组都必须是 C++ 编译器已知的固定大小。所以仅仅创建一个变量是不够的const
,编译器必须能够找出value以及。所以要么newArraySize
必须是编译时常量表达式,或者更有可能,您必须使用动态数组,最好由std::vector
.
std::vector<int> deduped(newArraySize);
如果您不能使用vector
,还有其他(更糟糕的)选择:std::unique_ptr<int[]>
,自己管理动态内存int* deduped=new[newArraySize]();
and delete deduped;
,或者创建一个具有编译时常数最大大小 (1000) 的本地数组,并单独跟踪实际使用的元素数量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)