请考虑以下代码:
#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
答案 0 :(得分:4)
编译器隐式地将第一个参数char const[4]
转换为bool
,并生成true
。
相当于
myBar.foo((bool)"bla");
也等同于
myBar.foo((bool)"bla", "");
答案 1 :(得分:1)
因为"bla"
是char const[4]
,它会衰减到const char*
,并被强制转换为bool。由于它的值不是0
,因此广播会使用值true
。一个更简单的例子:
#include <iostream>
int main()
{
std::cout << std::boolalpha; // print bools nicely
bool b = "Hello";
std::cout << b << "\n";
}
产生
真
答案 2 :(得分:0)
Bool参数将“bla”转换为true。 您需要更改参数的顺序。