假设我有一个函数:
void foo(const std::string& str);
我可以调用那个函数:
foo("my string");
std::string
如何接受一个字符串来代替类型?它是一个重载的运算符吗?我正在制作自己的字符串类,此功能必不可少。
最佳答案
接到电话
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"));
关于c++ - 字符串运算符,如 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775793/