C++. Почему перечисление (во время определения) нельзя инициализировать путем сужающего преобразования? ⇐ C++
-
Anonymous
C++. Почему перечисление (во время определения) нельзя инициализировать путем сужающего преобразования?
С помощью следующего фрагмента кода
const int i = 1.1; // ОК, сужающая конверсия константный интервал j = 1; // ХОРОШО const double k = 1,1; // ХОРОШО константный символ с = 1; // ХОРОШО перечисление е { Я = я, // ОК J = j, // ОК K = k, // Неверно, сужающее преобразование не разрешено C = c, // ОК, расширяющее преобразование разрешено. }; Я понятия не имею, почему перечисления не принимают десятичное значение при инициализации, поскольку перечисления были разработаны до C++ 11 и часто допускают сужающее преобразование. Хотя разумно сказать: «Так гласит стандарт». Мне интересно, существовали ли какие-либо единые критерии для определения возможности выполнения сужающего преобразования (до C++11)?
С помощью следующего фрагмента кода
const int i = 1.1; // ОК, сужающая конверсия константный интервал j = 1; // ХОРОШО const double k = 1,1; // ХОРОШО константный символ с = 1; // ХОРОШО перечисление е { Я = я, // ОК J = j, // ОК K = k, // Неверно, сужающее преобразование не разрешено C = c, // ОК, расширяющее преобразование разрешено. }; Я понятия не имею, почему перечисления не принимают десятичное значение при инициализации, поскольку перечисления были разработаны до C++ 11 и часто допускают сужающее преобразование. Хотя разумно сказать: «Так гласит стандарт». Мне интересно, существовали ли какие-либо единые критерии для определения возможности выполнения сужающего преобразования (до C++11)?
Мобильная версия