《C++ Primer 第五版》的第14.1章写道:
一个运算符函数必须是类的成员或至少有一个参数是类类型。
例如,string("hello")+"world"
是可编译的,而 "hello"+"world"
则不能编译。当我想要重载两个 C 字符串之间的 +
运算符时也是同样的情况。
std::string operator+ (const char* s1, const char* s2)
我遇到了以下错误。
错误:'std::string operator+(const char*, const char*)'必须具有类或枚举类型的参数
我有两个问题。
这种限制是语言规范的一部分吗?如果是,为什么 C++ 设计者要这样做?
std::string
有像string (const char* s);
这样的构造函数,这意味着编译器可以将char*
隐式转换为string
类型。当我们调用"hello" + "world"
时,为什么编译器不会将这两个char*
转换为两个字符串呢? 毕竟,在两个 std::strings 上有一个重载的 "+"。string operator+ (const string& lhs, const string& rhs);
char*
构造s1,再用char*
构造s2,然后将这些临时变量传递给您的函数。 - W.B.