Законно использование ранее определенных участников как часть более поздних участников в перечислимом определении?

Я думаю то, что Lambda выражение может разрешить и дерево выражений и анонимный делегат, таким образом, можно передать то же описание lambda выражение и к IEnumerable<T> дополнительные методы и к IQueryable<T> дополнительные методы.

6
задан Geoff 26 October 2009 в 22:10
поделиться

2 ответа

Да - требуется, чтобы это выражение было интегральной константой. Стандарт C ++ включает следующий пример:

enum { d, e, f=e+2 };
12
ответ дан 8 December 2019 в 18:38
поделиться

Как указал Джерри , это законно.

В некоторых редких случаях его раздражает то, что тип счетчиков указывается только после перечисления полностью определено. В стандарте говорится следующее о типах перечислений (7.2 / 4):

Каждое перечисление определяет тип, отличный от всех других типов. После закрывающей скобки спецификатора перечисления каждый перечислитель имеет тип своего перечисления. Перед закрывающей фигурной скобкой тип каждого перечислителя является типом его инициализирующего значения. Если для перечислителя указан инициализатор, значение инициализации имеет тот же тип, что и выражение. Если для первого перечислителя не указан инициализатор, тип является неопределенным целым типом . В противном случае тип совпадает с типом инициализирующего значения предыдущего перечислителя, если только увеличиваемое значение не может быть представлено в этом типе, и в этом случае тип является неопределенным целочисленным типом, достаточным для содержания увеличенного значения.

Выделено предложение может быть показано в следующем примере:

enum E {
  E0            // Unspecified type
  , E1 = E0-1   // -1, or MAX_UINT
  , E2          // 0 or (MAX_UINT+1)
};

В основном, тип, выбранный для E0 , влияет на результирующее значение E1 .

Если для перечислителя указан инициализатор, значение инициализации имеет тот же тип, что и выражение. Если для первого перечислителя не указан инициализатор, тип является неопределенным целочисленным типом . В противном случае тип совпадает с типом инициализирующего значения предыдущего перечислителя, если только увеличиваемое значение не может быть представлено в этом типе, и в этом случае тип является неопределенным целочисленным типом, достаточным для содержания увеличенного значения.

Выделено предложение может быть показано в следующем примере:

enum E {
  E0            // Unspecified type
  , E1 = E0-1   // -1, or MAX_UINT
  , E2          // 0 or (MAX_UINT+1)
};

В основном, тип, выбранный для E0 , влияет на результирующее значение E1 .

Если для перечислителя указан инициализатор, значение инициализации имеет тот же тип, что и выражение. Если для первого перечислителя не указан инициализатор, тип является неопределенным целым типом . В противном случае тип совпадает с типом инициализирующего значения предыдущего перечислителя, если только увеличиваемое значение не может быть представлено в этом типе, и в этом случае тип является неопределенным целочисленным типом, достаточным для содержания увеличенного значения.

Выделено Предложение может быть показано в следующем примере:

enum E {
  E0            // Unspecified type
  , E1 = E0-1   // -1, or MAX_UINT
  , E2          // 0 or (MAX_UINT+1)
};

В основном, тип, выбранный для E0 , влияет на результирующее значение E1 .

тип является неуказанным целым типом . В противном случае тип совпадает с типом инициализирующего значения предыдущего перечислителя, если только увеличиваемое значение не может быть представлено в этом типе, и в этом случае тип является неопределенным целочисленным типом, достаточным для содержания увеличенного значения.

Выделено Предложение может быть показано в следующем примере:

enum E {
  E0            // Unspecified type
  , E1 = E0-1   // -1, or MAX_UINT
  , E2          // 0 or (MAX_UINT+1)
};

В основном, тип, выбранный для E0 , влияет на результирующее значение E1 .

тип является неуказанным целым типом . В противном случае тип совпадает с типом инициализирующего значения предыдущего перечислителя, если только увеличиваемое значение не может быть представлено в этом типе, и в этом случае тип является неопределенным целочисленным типом, достаточным для содержания увеличенного значения.

Выделено предложение может быть показано в следующем примере:

enum E {
  E0            // Unspecified type
  , E1 = E0-1   // -1, or MAX_UINT
  , E2          // 0 or (MAX_UINT+1)
};

В основном, тип, выбранный для E0 , влияет на результирующее значение E1 .

1
ответ дан 8 December 2019 в 18:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: