2012-06-17 59 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.

相关问题