这里是主题的主题:
#include <string>
#include <iostream>
void test(bool val)
{
std::cout << "bool" << std::endl;
}
void test(std::string val)
{
std::cout << "std::string" << std::endl;
}
int main(int argc, char *argv[])
{
test("hello");
return 0;
}
程序的输出是bool
。为什么选择 bool
变体?
要调用 bool
重载需要进行以下转换:
const char[6] ---> const char* ---> bool
要调用 std::string
重载需要进行以下转换:
const char[6] ---> const char* ---> std::string
这里涉及到用户自定义的转换(使用std::string
的转换构造函数)。任何没有用户定义转换的转换序列都优于具有用户定义转换的序列。
When comparing the basic forms of implicit conversion sequences (as defined in 13.3.3.1):
- a standard conversion sequence (13.3.3.1.1) is a better conversion sequence than a user-defined conversion sequence or an ellipsis conversion sequence, and
- [...]
标准转换序列是仅涉及标准转换的序列。用户定义的转换序列是涉及单个用户定义的转换的序列。