当我为int变量赋值时,为什么编译器不抱怨?

时间:2012-06-17 20:38:41

标签: c++ types type-conversion

我有一个看起来像这样的程序:

#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,我也没有收到编译器错误。有什么不对吗?

3 个答案:

答案 0 :(得分:2)

所有变量都保留其类型。但是,一种类型的值可以转换为另一种类型。

truebool类型的值,可隐式转换为int类型,值false变为0且值{{ 1}}成为true

C ++中有许多隐式转换,其中大多数转换允许数字类型之间的转换,并且可以编写用户定义的转换,以允许与用户定义类型之间的隐式转换。

答案 1 :(得分:1)

bool可隐式转换为int。提高你的警告级别你应该得到一个,但不是错误,因为这是合法的 C ++

答案 2 :(得分:0)

因为布尔类型被隐式转换为整数类型。例如,true + true计算结果为2。