说我有一个功能:
void foo(const std::string& str);
我可以调用该函数:
foo("my string");
std::string
如何接受字符串代替类型?它是一个重载运算符吗?我正在创建自己的字符串类,这个功能非常重要。
答案 0 :(得分:2)
给出一个电话
foo("my string");
编译器必须经过各种步骤来决定应该解析哪个函数调用。
foo
。foo
的函数,它将尝试查找可以使用给定参数调用的所有可行函数。如果有多个匹配项,它将尝试根据参数找到最佳匹配项。如果只有一个可行的函数,则编译器继续。如果没有可行的函数,则会出现编译错误。foo
的函数,它将尝试查看用于调用该函数的参数是否与参数类型匹配。如果是,则编译器继续。如果没有,则会出现编译错误。确定参数是否与函数的参数类型匹配的逻辑在这里描述的时间太长了。您可以在http://en.cppreference.com/w/cpp/language/overload_resolution和http://en.cppreference.com/w/cpp/language/implicit_conversion了解更多相关信息。
在您的情况下,"my string"
可以使用std::string
的构造函数转换为std::string
。电话
foo("my string");
相当于:
foo(std::string("my string"));