2

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

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

4

3 回答 3

2

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

true是 type 的值bool,它可以隐式转换为 type int,值false变为0,值true变为1

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

于 2012-06-17T20:40:40.923 回答
1

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

于 2012-06-17T20:40:46.237 回答
0

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

于 2012-06-17T20:44:11.480 回答