C++中的默认参数不匹配
default argument mismatch in C++?
请考虑以下代码:
#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
编译器
将第一个参数 a char const[4]
隐式强制转换为 bool
,并产生true
。
相当于
myBar.foo((bool)"bla");
这也相当于
myBar.foo((bool)"bla", "");
因为"bla"
是一个char const[4]
,它衰变为const char*
,并被投射到布尔值。由于它的值不0
,强制转换取值true
。一个更简单的例子:
#include <iostream>
int main()
{
std::cout << std::boolalpha; // print bools nicely
bool b = "Hello";
std::cout << b << "n";
}
生产
真
Bool 参数将 "bla" 转换为 true。您需要更改参数的顺序。
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 为什么使用不匹配的参数调用重载函数仍然有效
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- 程序告诉我,即使它们明显匹配,参数也不匹配
- 模板参数'(type)0'与'EnumValue'不匹配
- 将构造函数添加到boost.python子类导致参数不匹配错误
- LPCSTR和wchar_t问题.由于参数不匹配,导致链接器错误
- 为什么可以将std::bind分配给参数不匹配的std::函数
- C++中的默认参数不匹配
- 布尔类型的参数不匹配
- 方法调用C++/数字参数不匹配
- NULL 与模板参数不匹配?
- C++ - 模板 + 'using' 子句 - 参数不匹配错误
- c++代码中的参数不匹配错误
- QT5迁移和Boost:if.hp:宏参数不匹配错误
- 为什么函数原型中的参数数量与定义中的参数不匹配
- 为什么我的函数参数不匹配