我有一个看起来像这样的程序:
#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设置为true而不是int,我也没有收到编译器错误。有什么不对吗?
答案 0 :(得分:2)
所有变量都保留其类型。但是,一种类型的值可以转换为另一种类型。
true
是bool
类型的值,可隐式转换为int
类型,值false
变为0
且值{{ 1}}成为true
。
C ++中有许多隐式转换,其中大多数转换允许数字类型之间的转换,并且可以编写用户定义的转换,以允许与用户定义类型之间的隐式转换。
答案 1 :(得分:1)
bool
可隐式转换为int
。提高你的警告级别你应该得到一个,但不是错误,因为这是合法的 C ++ 。
答案 2 :(得分:0)
因为布尔类型被隐式转换为整数类型。例如,true + true计算结果为2。