我有一个功能: void foo(bool boolParam = true)
我改为: void foo(const char* charParam, bool boolParam = true)
为了避免搜索,我只编译了代码,希望编译器会因为参数类型错误而调用函数时出错(或至少是警告),但编译器默认将false转换为false NULL
并编译所有内容,没有错误或警告。这种行为是否正确?我知道那是假的 NULL
都是0,但我认为编译器应该至少给出一些警告信息......
我有一个功能: void foo(bool boolParam = true)
我改为: void foo(const char* charParam, bool boolParam = true)
为了避免搜索,我只编译了代码,希望编译器会因为参数类型错误而调用函数时出错(或至少是警告),但编译器默认将false转换为false NULL
并编译所有内容,没有错误或警告。这种行为是否正确?我知道那是假的 NULL
都是0,但我认为编译器应该至少给出一些警告信息......
这种行为完全正确,因为(正如您所注意到的)转换来自 false
(一个有效的空指针常量)到指针是隐式的。试试吧 std::string
代替。
您可以保留原始功能未实现:
void foo(bool boolParam = true);
void foo(const char* charParam, bool boolParam = true)
{
// do stuff
}
现在每当你打电话 foo()
, foo(true)
,和 foo(false)
它会导致编译错误。然而, foo(NULL)
不会编译因为NULL和false是不明确的(然后我们回到原点...)。