当将整数传递给具有 char 参数的函数时,c++ 不给出警告或错误

c++ give no warning or error when a integer is passed to a function that has char arguments

当将整数传递给采用 char 参数的函数时,为什么 c++ 不给出警告或错误。

void test(char a) {
    std::cout << a;
}


test(1);

这样做会出现意想不到的行为(即打印 ?)。但我希望这是一个错误,或者至少是一个编译警告,因为正在发生某种转换。为什么这没有发生?

我不是很确定为什么 c++允许隐式转换在这里,也许是因为它有利于处理原始内存。


为什么会出现意外行为

1 是有效的 control code,例如 '[=13=]''\n'

而您应该使用 '1'(或 49,假定 ASCII 或兼容格式)


如果不适合,编译器会发出警告。

void test(char c);
void F(){test(1);} // OK
void G(){test(10000);} // warning 
void H(int v){test(v);} // need -Wconversion

Compiler Explorer