我刚刚在一本初学者书籍上读到了关于函数重载的内容。 出于好奇,我想问一下,在char*和std::string之间进行重载是否安全。
我尝试使用以下代码,并得到了一些结果。但我不确定它是否是未定义的行为。
void foo(std::string str) {
cout << "This is the std::string version. " << endl;
}
void foo(char* str) {
cout << "This is the char* version. " << endl;
}
int main(int argc, char *argv[]) {
foo("Hello"); // result shows char* version is invoked
std::string s = "Hello";
foo(s); // result shows std::string version
return 0;
}
char *
是无效的。 - chrisfoo("Hello")
会调用char *
版本?我的担忧是,当char*
不在场时,它也可能调用std::string
版本。这与类型的接近程度有关吗?(即"Hello"
是一个字面量,比std::string
更接近 char*) - user3424826const char[N]
到char *
的标准转换优先于用户定义的转换。 - chris