The following code compiles and it seems to run fine:
class Test {
private:
const unsigned MAX;
public:
Test (const unsigned int n) : MAX(n) { }
void foo () {
int array[MAX];
...
}
};
but is it really OK? I mean:
Test a (3);
Test b (8);
does array actually have 3 and 8 cells respectively?
If so, is it because array is an automatic var and gets instantiated with the appropriate dimension?
Thanks
What you have written is valid in c99 but not valid c++.
I am of course talking about your use of VLA‘s, not the full snippet.
When compiling using
g++ -pedantic -ansi -Wallwe get the below warning;As mentioned in the above warning the pattern you are using is often referred to as using a variable length array, which is standard in C99 and “allowed” in C++ through a g++ extension.
I’d recommend you to use a STL container instead of hacks as these, for one single reason; what you are doing is not legal, and therefor isn’t guaranteed to be portable cross compilers.