【发布时间】:2020-03-19 15:41:23
【问题描述】:
我有一个大小为DIMENSIONS 的全局数组:DIMENSIONS 是一个静态全局变量。我可以更改硬编码的DIMENSIONS 变量而不会在编译或执行时出现问题,但是有没有办法在编译时与运行时确定这个值?
const static unsigned int DIMENSIONS = 2;
std::array<double, DIMENSIONS> arr;
// ...
// ...
// ...
int main (int argc, char* argv[]) {
// argv[1] contains value '4'
}
如果我将DIMENSIONS 设为非常量非静态,有没有办法在main() 中将其重新初始化为argv[1] 并让arr 仍然正确实例化?我想完成的一个想法:
unsigned int DIMENSIONS;
std::array<double, DIMENSIONS> arr;
// ...
// ...
// ...
int main (int argc, char* argv[]) {
DIMENSIONS = atoi(argv[1]);
}
我想通过命令行控制我的程序的维度(用于爬山优化)。我了解数组不能具有动态大小,除了 VLA 之外,必须在编译时声明其大小,而不是在运行时声明。不过,我特别需要一个全局非 VLA。
【问题讨论】:
-
std::vector. -
简短回答:不,没有。 C++ 不能以这种方式工作。这就是
std::vector的用途。 -
您似乎已经回答了自己的问题:“我了解数组 [...] 必须在编译时声明其大小,而不是在运行时声明。”问你是否可以在运行时而不是编译时设置它们的大小?