2012-06-17 100 views
2

我有一個程序,看起來像這樣:爲什麼編譯器在向int變量賦值true時不會抱怨?

#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爲真,而不是爲int編譯錯誤。有什麼不對?

回答

2

您的變量都保留它們的類型。但是,一種類型的值可能會轉換爲另一種類型。

truebool類型,這是隱式轉換爲鍵入int,與成爲0false,成爲1true的值。

有在C++許多隱式轉換,其中大部分的允許數字類型之間的轉換,並且可以寫入用戶定義的轉換,以允許隱式轉換到和從用戶定義的類型。

1

bool隱式轉換爲一個int。提高你的警告級別,你應該得到一個,但沒有錯誤,因爲這是合法的C++

0

因爲布爾類型隱式轉換爲整數類型。 true + true例如評估爲2.

相關問題