Неявный не оператор (!) С объяснением перечислений? - PullRequest
0 голосов
/ 06 октября 2018

Недавно я наткнулся на этот кусок кода, и мне интересно, почему он работает.Объявление Enum:

enum BuildResult {
    RESULT_ERROR,
    RESULT_SUCCESS
};

Позже этот Enum используется в операторе if (игнорируйте тот факт, что вместо него может быть RESULT_ERROR):

if (!objectHere->build_result == ClassNameHere::RESULT_SUCCESS)

Я не знал, чтоВы можете использовать оператор not !, чтобы перевернуть значение Enum.Это работает только с Enums, которые имеют два состояния?Существуют ли другие виды неявных операторов, которые можно использовать с Enums?Я нашел этот вопрос о ручном объявлении операторов, но, похоже, он не упоминает никаких неявных операторов для перечислений.

1 Ответ

0 голосов
/ 06 октября 2018

enum неявно приводится к bool.Когда вы переворачиваете его, это больше не тип enum, а булево значение pr.

Если вы замените enum на enum class, что является безопасным типом, это преобразование больше невозможно.

Когда используется простое объявление enum, значения enum r ведут себя точно так же, как целые числа.Вы даже можете указать тип целого числа:

enum myEnum : uint32_t { NOT, TYPE, SAFE };

(обратите внимание на неявные значения перечисления: {NOT=0, TYPE=1, SAFE=2})

...