簡體   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