2012-06-17 2 views
2

У меня есть программа, которая выглядит следующим образом:Почему компилятор не жалуется, когда я присваиваю true переменной int?

#include <stdio.h> 
#include <stdlib.h> 
#include "string.h" 
#include <sstream> 

class A{ 
    int num1; 
    char char1; 

    public: 
     void set_print_num(int); 
}; 

void A::set_print_num(int n){ 
    num1 = true; 
    printf("this is %d", num1); 
} 

int main(void){ 
    A a_inst; 
    a_inst.set_print_num(5); 
} 

Я не получаю ошибку компиляции, даже если я поставил num1 истина, а не к междунар. Здесь что-то не так?

ответ

2

Все ваши переменные сохраняют свои типы. Однако значение одного типа может быть преобразовано в другой тип.

true является значением типа bool, который неявно преобразован в тип int, со значением false становится 0 и значением true становится 1.

Существует много неявных преобразований в C++, большинство из которых допускают преобразования между числовыми типами, и можно писать определенные пользователем преобразования, чтобы допускать неявные преобразования в пользовательские типы и из них.

1

A bool неявно конвертируется в int. Поднимите свой уровень предупреждения, и вы должны получить его, но не ошибку, поскольку это законно. C++.

0

поскольку логические типы неявно преобразуются в целые типы. true + true, например, равно 2.

Смежные вопросы