std::string somestring;
/*...*/
if("STRING_LITERAL" == somestring)
std::cout << "Strings are Equal" << std::endl;
在上面的示例代码中,C ++编译器如何解释==
运营商?由于==
运算符被字符串类重载?
答案 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()
实现。