Опечатка на странице msdn "Выражения констант C ++"? - PullRequest
3 голосов
/ 23 декабря 2010

На странице msdn для константных выражений c ++ говорится:

Неинтегральные константы должны быть преобразован (явно или неявно), чтобы целочисленные типы были законно в постоянном выражении. Таким образом, следующий код правовая:

const double Size = 11.0;
char chArray[(int)Size];

По крайней мере на VC ++ 10.0 вторая строка выдает: «ошибка C2057: ожидаемое постоянное выражение». Так допустимо ли это на каком-то другом компиляторе или страница msdn просто неверна?

Ответы [ 2 ]

6 голосов
/ 23 декабря 2010

Согласно 5.19 / 1:

интегральная константа-выражение банка задействовать только литералы (2.13), перечислители, const переменные или члены статических данных из интегральных или типы перечисления , инициализированные константные выражения (8.5), нетипичные параметры шаблона интеграла или типы перечисления и sizeof выражения. Плавающие литералы (2.13.3) могут появляться только если они приведение к интегралу или перечислению Типы .

Насколько я понимаю, код недействителен, в то время как следующее допустимо:

char chArray[(int)11.0];
3 голосов
/ 23 декабря 2010

Это не разрешено в соответствии со стандартом C ++.См. 5.19 / 2 для правил в спецификации.

...