字符串运算符,如std::String

String operator like std::string

本文关键字:String std 运算符 字符串      更新时间:2023-10-16

假设我有一个函数:

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.

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

foo("my string");

相当于:

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