[英]How does the const char* and string comparison work in C++?
考虑以下代码片段:
#include <iostream>
int main() {
std::string str = "Hello";
const char *cstr = "Hello";
if (cstr == str) {
std::cout<<"Both are same string.";
}
return 0;
}
我很难猜测const char *和字符串比较的工作方式:
if (cstr == str) {
据我了解,左操作数(在本例中为cstr )的重载运算符以str作为参数调用。 现在const char *没有重载== 。 那么上面的比较甚至如何工作?
如果比较是str == cstr ,那么接受它就不会有问题(因为std :: string的==重载,并且它接受const char *作为比较的参数)。
注意:-我正在使用gcc-4.8.1来编译以上代码。
来自http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp 。
比较basic_string对象和T的空终止数组
template< class CharT, class traits, class Alloc >
bool operator==(const CharT* lhs, const basic_string<CharT,Traits,Alloc>& rhs);
template< class CharT, class traits, class Alloc >
bool operator==(const basic_string<CharT,Traits,Alloc>& lhs, const CharT* rhs);
...
据我了解,左操作数(在这种情况下为cstr)的重载运算符使用str作为参数来调用。 现在const char *没有重载==。
该运算符实际上是std :: string的,并且在概念上看起来与此类似:
bool operator==(const char* const lhs, const std::string& rhs);
(尽管实际上它是模板化的)。
此std :: string运算符专门为您提到的操作添加(将char *作为比较中的左侧操作数提供时,将std :: string与char *进行比较)。
如果比较是str == cstr,则接受它没有问题(因为std :: string的==重载,并且接受const char *作为比较参数)。
两者都存在(专门用于支持这种情况)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.