Visual Studio 2010中的C++隐式类型转换

Mir*_*pas 11 c++ visual-studio-2010 visual-studio visual-c++

我有一个功能: void foo(bool boolParam = true)

我把它改成了: void foo(const char* charParam, bool boolParam = true)

为了避免搜索,我只编译了代码,希望编译器会因为参数类型错误而调用函数时会发出错误(或至少是警告),但编译器会默认将false转换为NULL并编译所有内容而不会出现错误或警告.这种行为是否正确?我知道这是假的,NULL都是0,但我认为编译器应该给出至少一些警告信息......

Mar*_*lon 7

您可以保留原始功能未实现:

void foo(bool boolParam = true);
void foo(const char* charParam, bool boolParam = true)
{
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

现在每当你调用foo()foo(true),foo(false)它都会导致编译错误.但是,foo(NULL)不会编译,因为NULL和false是不明确的(然后我们回到原点...).


MSa*_*ers 6

行为是完全正确的,因为(正如您所注意到的)从false(有效的空指针常量)到指针的转换是隐式的.试试吧std::string.

  • 我不认为从bool到指针的转换是隐含的.当我从false更改为true时,我遇到了以下错误:错误C2664:'foo':无法将参数1从'bool'转换为'const char*'.之前是正确的,因为false为0为NULL. (2认同)