C ++编译器如何解释==运算符?

时间:2011-05-08 11:39:36

标签: c++

   std::string somestring;
    /*...*/
    if("STRING_LITERAL" == somestring)
    std::cout << "Strings are Equal" << std::endl;

在上面的示例代码中,C ++编译器如何解释== 运营商?由于==运算符被字符串类重载?

4 个答案:

答案 0 :(得分:7)

如果您使用的是std::string,那么您应该#include标题<string>。假设是这种情况,那么所选的operator==应该是来自<string>的非成员模板函数,并推导出适当的模板参数。 (ISO / IEC 14882:2003 21.3.7.2 [lib.string :: operator ==])

template<class charT, class traits, class Allocator>
bool operator==(const charT* lhs,
    const basic_string<charT,traits,Allocator>& rhs);

std::string类(严格类模板特化)不包含operator==的任何成员重载。

答案 1 :(得分:2)

是。 operator==被实现为独立功能,这就是定位无关紧要的原因。它可能是

bool operator==(const string& str1, const char* str2){
  // ...
}

bool operator==(const char* str1, const string& str2){
  // ...
}

甚至是简单的

bool operator==(const string& str1, const string& str2){
  // ...
}

char const*string的自动转换,因为std::string的相关构造函数是非显式的。

答案 2 :(得分:1)

operator==的重载是正确的:

template <class charT, class traits, class Allocator>
bool operator==(const charT* lhs,
                const basic_string<charT, traits, Allocator>& rhs);

您可以在第635页的C ++ 0x FDIS的21.3§1中找到它。

答案 3 :(得分:0)

http://www.cplusplus.com/reference/string/operators/开始,定义了这些重载:

bool operator== ( const string& lhs, const string& rhs );
bool operator== ( const char* lhs, const string& rhs );
bool operator== ( const string& lhs, const char* rhs );

请注意,这些是全局函数,而不是string类的方法(但它们将使用string::compare()实现。