繁体   English   中英

const char *和字符串比较在C ++中如何工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM