考虑以下代码:
#include <iostream>
class Bar
{
public:
void foo(bool b = false, std::string name = "");
};
void Bar::foo(bool b, std::string name)
{
if (!b)
{
std::cout << "b is false" << std::endl;
}
else
{
std::cout << "b is true" << std::endl;
}
}
int main()
{
Bar myBar;
myBar.foo("bla");
return 0;
}
我猜 C++ 没有损坏,但是有人可以解释为什么输出是真的吗?我正在使用 VS 2010,但我也检查了运行 gcc 的 ideone
最佳答案
编译器隐式转换第一个参数,一个 char const[4]
, 至 bool
, 结果为 true
.
相当于
myBar.foo((bool)"bla");
也等同于
myBar.foo((bool)"bla", "");
关于c++ - C++ 中的默认参数不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982470/