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,但我认为编译器应该给出至少一些警告信息......
您可以保留原始功能未实现:
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是不明确的(然后我们回到原点...).
行为是完全正确的,因为(正如您所注意到的)从false(有效的空指针常量)到指针的转换是隐式的.试试吧std::string.
| 归档时间: |
|
| 查看次数: |
982 次 |
| 最近记录: |