首页 文章

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

提问于
浏览
0

请考虑以下代码段:

#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) {

根据我的理解,使用 str 作为参数调用左操作数的重载运算符(在本例中为 cstr ) . 现在没有为const char *重载 == . 那么上述比较如何起作用呢?

如果比较是 str==cstr ,我就没有接受它的问题(因为==对于std :: string重载并且它接受const char *作为参数进行比较) .

注意: - 我正在使用gcc-4.8.1来编译上面的代码 .

2 回答

  • 2

    根据我的理解,使用str作为参数调用左操作数的重载运算符(在本例中为cstr) . 现在没有为const char *重载== .

    运算符实际上是std :: string,在概念上看起来与此类似:

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

    (尽管事实上它是模板化的) .

    std :: string的这个运算符是专门为你提到的操作添加的(比较std :: string和char *,当char *作为比较中的左侧操作数提供时) .

    如果比较是str == cstr,我就没有接受它的问题(因为==对于std :: string重载并且它接受const char *作为参数进行比较) .

    两者都存在(特别是为了支持这种情况) .

  • 3

    来自http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp .

    比较basic_string对象和以null结尾的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);
    

    ...

相关问题