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

时间:2011-02-25 08:26:14

标签: c++ visual-studio visual-studio-2010 visual-c++

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

我将其更改为:void foo(const char* charParam, bool boolParam = true)

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

2 个答案:

答案 0 :(得分:7)

您可以保留原始功能:

void foo(bool boolParam = true);
void foo(const char* charParam, bool boolParam = true)
{
  // do stuff
}

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

答案 1 :(得分:6)

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