Опечатка на странице MSDN «C ++ постоянные выражения»?
-
12-10-2019 - |
Вопрос
Это говорит на Страница MSDN для постоянных выражений C ++ что:
Неинтегральные константы должны быть преобразованы (явно или неявно) в интегральные типы, чтобы быть законными в постоянном выражении. Следовательно, следующий код является законным:
const double Size = 11.0; char chArray[(int)Size];
По крайней мере, на VC ++ 10.0. Вторая строка создает: «Ошибка C2057: ожидаемое постоянное выражение». Так является ли он законным для какого -то другого компилятора или страница MSDN просто неправильно?
Решение
Согласно 5.19/1:
Атмосфера Интегральная постоянная экспрессия может включать только литералы (2.13), перечисления,
const
переменные или статические члены данных интегральных типов или перечисления инициализированные с постоянными выражениями (8.5), параметры шаблонов непредуsizeof
выражения. Плавающие литералы (2.13.3) могут появиться только в том случае, если они подтянуты к интегральным типам или типам перечисления.
На мой взгляд, код недействителен, а следующее - законно:
char chArray[(int)11.0];
Другие советы
Это не законно в соответствии со стандартным C ++. См. 5.19/2 для правил в спецификации.