типы — Какие операции вы можете выполнять с операторами bool и int в C ++?

У меня есть переменная, которая значение Можно отличаются от 0 до 1, поэтому я хотел бы использовать тип bool для удержания этого значения.

В C ++ исходя из этой идеи, какие операции я могу сделать, тип первый операнд являющийся BOOL и секундного являющийся int или float?

Например, это действительно?

bool exists;
int value;
(...)
value += exists;
value *= exists;

Если да, пока C ++ преобразует эти значения в свои двоичные присваивает и не видит проблем с выполнением операции на тех двоичные числа, это действительный делать операции с операнды, которые отличаются?

1

Решение

Да, эти операции существуют, они находятся в стандартном разделе C ++ 13.6 (обратите внимание, bool является целочисленным типом, который также делает его арифметическим):

За каждую тройку (L, VQ, R), где L это арифметический тип, VQ либо volatile или пустой, и R является повышенным арифметическим типом, существуют операторные функции-кандидаты вида

VQ L & operator=(VQ L &, R );
VQ L & operator*=(VQ L &, R );
VQ L & operator/=(VQ L &, R );
VQ L & operator+=(VQ L &, R );
VQ L & operator-=(VQ L &, R );

Семантика определена в разделе 5.18:

Поведение выражения формы E1 op = E2 эквивалентно E1 = E1 op E2 за исключением того, что E1 оценивается только один раз. В += и — =, E1 должен либо иметь арифметический тип, либо быть указателем на, возможно, cv-квалифицированный полностью определенный тип объекта. Во всех остальных случаях E1 должен иметь арифметический тип.

а также

Если левый операнд не относится к типу класса, выражение неявно преобразуется (пункт 4) в cv-неквалифицированный тип левого операнда.

3

Другие решения

допустимо делать операции с операндами, которые отличаются?

value += exists;
value *= exists;

Да, это действительно, bool тип неявно преобразуется в int, Это похоже на то, что вы делаете с операторами (+, -) со смешанными int а также short операнды.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector