У меня есть переменная, которая значение Можно отличаются от 0 до 1, поэтому я хотел бы использовать тип bool для удержания этого значения.
В C ++ исходя из этой идеи, какие операции я могу сделать, тип первый операнд являющийся BOOL и секундного являющийся int или float?
Например, это действительно?
bool exists;
int value;
(...)
value += exists;
value *= exists;
Если да, пока C ++ преобразует эти значения в свои двоичные присваивает и не видит проблем с выполнением операции на тех двоичные числа, это действительный делать операции с операнды, которые отличаются?
Да, эти операции существуют, они находятся в стандартном разделе 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-неквалифицированный тип левого операнда.
допустимо делать операции с операндами, которые отличаются?
value += exists;
value *= exists;
Да, это действительно, bool
тип неявно преобразуется в int
, Это похоже на то, что вы делаете с операторами (+, -) со смешанными int
а также short
операнды.