下面的代码可以编译并且运行良好:
class Test {
private:
const unsigned MAX;
public:
Test (const unsigned int n) : MAX(n) { }
void foo () {
int array[MAX];
...
}
};
但是真的可以吗?我的意思是:
Test a (3);
Test b (8);
array
实际上分别有 3 个和 8 个单元格吗?
如果是这样,是不是因为 array
是一个自动 var 并使用适当的维度进行实例化?
谢谢
最佳答案
我当然是在谈论您对 VLA 的使用的,而不是完整的片段。
当使用 g++ -pedantic -ansi -Wall
编译时,我们收到以下警告;
foo.cpp: In member function 'void Test::foo()':
foo.cpp:18:23: warning: ISO C++ forbids variable length array 'array' [-Wvla]
如上述警告中所述,您使用的模式通常称为使用可变长度数组,这在 C99 中是标准,在 C++ 中是“允许的”通过 g++ 扩展。
出于一个原因,我建议您使用 STL 容器而不是这些 hacks;你所做的是不合法的,因此不能保证是可移植的交叉编译器。
关于c++ - 构造函数设置的 "const variables"用于表示 C++ 数组的边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9718924/