我有两个带有const std :: string& amp;的重载函数和布尔分别。我现在用文字字符串调用该函数。 bool版本被调用。这有点奇怪,这确实是一个陷阱。
任何人都可以解释原因吗?
请参阅下面的代码。输出是
Write == 1
#include <iostream>
#include <string>
void write(const std::string& name_) {
std::cout << "Write == " << name_ << std::endl;
}
void write(bool name_) {
std::cout << "Write == " << name_ << std::endl;
}
int main()
{
write("data");
}
答案 0 :(得分:3)
问题是你写的参数是不是类型为std :: string的值(它不是std :: string的文字)而是字符数组。
不幸的是,我同意你的观点,这是一个陷阱,重载决策的规则将选择将数组转换为布尔值,转换为const引用为字符串。
请注意,在C ++ 11中有实际的std::string
文字,我不会在这里详细介绍。
重载是什么修复了显式转换为std :: string:
的问题 write(std::string("data"))
会做正确的事。
将来防止此问题。这确实是一个陷阱。