【问题标题】:String operator like std::string字符串运算符,例如 std::string
【发布时间】:2017-06-06 03:49:12
【问题描述】:

假设我有一个函数:

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

我可以调用那个函数:

foo("my string");

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

【问题讨论】:

  • std::string 有一个采用const char* 的非显式构造函数。

标签: c++ string operator-overloading operators


【解决方案1】:

接到电话

foo("my string");

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

  1. 找出给定范围内的所有函数foo
  2. 如果有多个名为foo 的函数,它将尝试查找所有可用给定参数调用的可行函数。如果有多个匹配项,它将尝试在给定参数的情况下找到最佳匹配项。如果只有一个可行的函数,则编译器继续。如果没有可行的函数,就会出现编译错误。
  3. 如果只有一个名为foo的函数,它将尝试查看用于调用该函数的参数是否与参数类型匹配。如果是,则编译器继续。如果不是,则会出现编译器错误。

判断参数是否与函数的参数类型匹配的逻辑太长,无法在此描述。您可以在http://en.cppreference.com/w/cpp/language/overload_resolutionhttp://en.cppreference.com/w/cpp/language/implicit_conversion 阅读更多相关信息。

在您的情况下,"my string" 可以使用std::string 的构造函数转换为std::string。来电

foo("my string");

相当于:

foo(std::string("my string"));

【讨论】:

  • 那么,如果我理解正确,这一切都取决于编译器?
  • @OliverYasuna,是的,但是编译器必须遵循标准的规定。
  • 该死,所以我将无法创建自己的字符串类来执行此操作。谢谢
  • @OliverYasuna 当然可以,只要有一个接受 const char* 的非显式构造函数即可。
  • 哦,呵呵。我陷入了自己的困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多