Размеры массива должны быть постоянным выражением:
const int foo = 10;
WCHAR array1[123]; // ok - 123 is a constant expression
WCHAR array2[foo + 10]; // ok too - the expression is constant
WCHAR array3[bar(123)]; // not ok - it may evaluate to the same thing every time, but function calls aren't seen as constant.
Обратите внимание, что const
не делает что-то константным выражением. Константное выражение является чем-то постоянным во время компиляции. Компилятор достаточно умен, чтобы понять, что что-то вроде 5+5
является константным выражением, но не настолько умен, чтобы понять, что foo(5,5)
является константным выражением - даже если foo(x,y)
просто возвращает x+y
.
В следующем стандарте C ++ (C ++ 0x) вы сможете определять функции как выражения const.