c++ - 字符串运算符,如 std::string

标签 c++ string operator-overloading operators

假设我有一个函数:

void foo(const std::string& str);

我可以调用那个函数:

foo("my string");

std::string 如何接受一个字符串来代替类型?它是一个重载的运算符吗?我正在制作自己的字符串类,此功能必不可少。

最佳答案

接到电话

foo("my string");

编译器必须通过各种步骤来决定应该解析哪个函数调用。

  1. 找出给定范围内的所有函数foo
  2. 如果有多个名为foo 的函数,它将尝试找到所有可用给定参数调用的函数。如果有多个匹配项,它将尝试在给定参数的情况下找到最佳匹配项。如果只有一个可行的函数,则编译器会继续执行。如果没有可行的函数,就会出现编译错误。
  3. 如果只有一个名为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/

相关文章:

swift - 带排除规则的反向字符串

c++ - 元多运算符重载

c++ - 在 C++ 中使用运算符重载

c++ - (C++,Qt,Linux) 将游戏 map 坐标转换为图像坐标

c++ - 可变函数重载和 SFINAE - 解决歧义以模拟 "hide by signature"

java - 从文本中删除 HTML 和 XML

c++ - 赋值=运算符重载

c++ - QT 检查至少一行被选中 QTableWidget

c++ - 从文件中读取动态bitset写入的数据无法读取正确的数据

string - 替换字符串中第一次出现的模式