C++在Visual Studio 2010
隐式类型转换我有一个功能:void foo(bool boolParam = true)
C++在Visual Studio 2010
我把它改为:void foo(const char* charParam, bool boolParam = true)
为了避免搜索我刚刚编译的代码希望编译器会给出一个错误(或至少是一个警告),因为函数被错误的参数类型调用,但是代替这个,编译器自动将false转换为NULL
,并编译所有内容而不会出现错误或警告。这种行为是否正确?我知道false和NULL
都是0,但我认为编译器至少应该给出一些警告信息...
你可以留下你的原有功能未实现:
void foo(bool boolParam = true);
void foo(const char* charParam, bool boolParam = true)
{
// do stuff
}
现在只要您拨打foo()
,foo(true)
和foo(false)
它会导致编译错误。但是,foo(NULL)
将不会编译,因为NULL和false是不明确的(然后我们又回到了原点之一......)。
为什么'foo(true)'或'foo(false)'会导致编译器错误? – templatetypedef 2011-02-25 09:42:13
@templatetypedef我用VS测试过这个。我想这是因为'foo(true)'和'foo(false)'比第二个函数更好地满足第一个函数,并且因为第一个函数未实现,所以会导致编译器错误。这是我的教育猜测。 – Marlon 2011-02-25 09:49:48
@ Marlon-啊,我错过了第一个功能未实现。这很聪明!在评论之前,我应该更仔细地阅读。 XD – templatetypedef 2011-02-25 09:52:26
呃,它可能应该给你一些警告,但我想这是因为'NULL'在'windows.h'中简单地定义为'0'。好问题,但。 – 2011-02-25 08:29:05
如果将警告级别设置为4(在项目设置中),您应该会收到一些警告。 – 2011-02-25 08:31:25
@Volker:你确定/ W4会对此产生警告吗? – 2011-02-25 08:35:23