C++ 为什么关系运算符在STL字符串中作为非成员函数重载?
我正在浏览STL字符串的文档-C++ 为什么关系运算符在STL字符串中作为非成员函数重载?,c++,string,stl,C++,String,Stl,我正在浏览STL字符串的文档- 在其中,我发现关系运算符作为非成员函数重载。它们作为非成员函数而不是成员函数重载有什么原因吗?将它们作为非成员函数重载可以将运算符的LHS转换为类型std::string。例如,如果operator==是成员,则以下内容不起作用: std::string name = "foo"; if ("foo" == name) // ... 这是因为“foo”.operator==(name)不是一个有效的表达式。只需提到cplusplus.com非常古老(它的
在其中,我发现关系运算符作为非成员函数重载。它们作为非成员函数而不是成员函数重载有什么原因吗?将它们作为非成员函数重载可以将运算符的LHS转换为类型
std::string
。例如,如果operator==
是成员,则以下内容不起作用:
std::string name = "foo";
if ("foo" == name)
// ...
这是因为
“foo”.operator==(name)
不是一个有效的表达式。只需提到cplusplus.com非常古老(它的目标是C++11)。请注意,您不应该依赖关系运算符作为成员函数或非成员函数。您应该依赖的是表达式a
(以及相关的表达式)是有效的,并且符合我们的期望。