Enum с 64-битным целым числом - PullRequest
2 голосов
/ 21 октября 2010

Я использую gcc, который реализует перечисления как 32-битные целые числа в архитектуре, которую я имею (не знаю в общем).Если я пытаюсь присвоить значение enum слишком большое, я получаю

warning: integer overflow in expression

Есть ли способ заставить gcc использовать 64-битные целые числа в качестве основного целочисленного типа?Способ для gcc хорош, хотя, если есть переносимый способ, это даже лучше.

** Edit ** Это связанный пост: 64-битное перечисление в C ++?

В отличие от этого вопроса, меня также интересуют расширения GNU.

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Следующее работает для меня с -std=c++0x, но не с -std=c++98 хотя

enum EnumFoo {
    FooSomething = 0x123456789ULL
};

Я проверял это с

$ g++ --version
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
0 голосов
/ 21 октября 2010

один вариант: создать шаблонный класс с static const членом определенного типа.

например std::tr1::integral_constant, объявленный в c ++ / tr1 / type_traits в дистрибутиве GNU (по крайней мере, тот, который я использую).

для значения enum: ваша декларация может иметь значение (например, использовать U, L в зависимости от ситуации)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...