Опечатка на странице MSDN «C ++ постоянные выражения»?

StackOverflow https://stackoverflow.com/questions/4518787

  •  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 для правил в спецификации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top