c ++: почему присвоение true или false char компилируется нормально - PullRequest
1 голос
/ 03 августа 2020

Мне интересно, почему следующая программа отлично компилируется

#include <iostream>
int main()
{
   char a = false;
   if (!a) {
       std::cout << "kdjk";
   }
   char b = true;
   if (!b) {
       std::cout << "ppp\n";
   }
   
   return 0;
}

Вывод : печатает kdjk

Почему присвоение значения bool char компилируется без предупреждений ?

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Это:

char a = false;

вызывает неявное преобразование из bool в char. Правила языка для преобразования значения bool в целочисленный тип (например, char) говорят, что:

prvalue типа bool может быть преобразовано в prvalue типа int, где false становится нулем, а true становится единицей. В результате значение a равно 0, а значение b равно 1.

1 голос
/ 03 августа 2020

Значение false равно 0 и соответствует символу, а ! - это оператор, который проверяет, равен ли операнд 0 или нет. Вот почему это работает.

...