Каким образом bool конвертируется в int?

Возникла следующая потребность: привести bool к int и умножить на коэффициент. Например,

bool valBool = true;

int exampleNumber = valBool * coef;

...

Вопрос состоит в том, всегда ли (т.е во всех ли стандартах С++/реализациях в компиляторах) будет bool приводится к int, и если будет приводится, то всегда ли он будет равен 1 (если True) и 0 (если False)? Если нет, то где может возникнуть проблема?


Ответы (1 шт):

Автор решения: isnullxbh

Если точнее, сначала здесь происходит lvalue-to-rvalue преобразование, а уже затем полученное prvalue конвертируется в значение типа int:

A prvalue of an integer type can be converted to a prvalue of another integer type.

If the source type is bool, the value false is converted to zero and the value true is converted to one.

Вот Вам пример AST подобного выражения для наглядности:

    `-BinaryOperator <col:20, col:24> 'int' '*'
   -> |-ImplicitCastExpr <col:20> 'int' <IntegralCast>
   -> | `-ImplicitCastExpr <col:20> 'bool' <LValueToRValue>
   -> |   `-DeclRefExpr <col:20> 'bool' lvalue ParmVar 0xc319f80 'a' 'bool'
       `-ImplicitCastExpr <col:24> 'int' <LValueToRValue>
         `-DeclRefExpr <col:24> 'int' lvalue ParmVar 0xc31a030 'b' 'int'

(стрелочками помечены интересующие Вас преобразования).

(см. тут)

→ Ссылка