Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么关系运算符在STL字符串中作为非成员函数重载?_C++_String_Stl - Fatal编程技术网

C++ 为什么关系运算符在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非常古老(它的

我正在浏览STL字符串的文档-


在其中,我发现关系运算符作为非成员函数重载。它们作为非成员函数而不是成员函数重载有什么原因吗?

将它们作为非成员函数重载可以将运算符的LHS转换为类型
std::string
。例如,如果
operator==
是成员,则以下内容不起作用:

std::string name = "foo";
if ("foo" == name)
    // ...

这是因为
“foo”.operator==(name)
不是一个有效的表达式。

只需提到cplusplus.com非常古老(它的目标是C++11)。请注意,您不应该依赖关系运算符作为成员函数或非成员函数。您应该依赖的是表达式
a
(以及相关的表达式)是有效的,并且符合我们的期望。