[英]How does c++ compare two string using ==?
我今天遇到了一個非常簡單但令人困惑的問題。
#include <iostream>
#include <string>
using namespace std;
int main(){
string str = "123";
string a = "1";
string b = "1";
cout << ((str[0]+"") == a) << endl;
cout << (a==str.substr(0,1)) << endl;
cout << (a==b) << endl;
}
輸出為:0 1 1
為什么第一個比較語句是假的? 使用==運算符時,c ++如何比較兩個字符串?
str[0]+""
是相當奇怪的東西 - 你取第一個字符的數值(假設字符'1'
的ASCII編碼為49),並將其添加到指向空的開頭的指針串。 這會給你一個無效的指針和未定義的行為。
如果你想從第一個字符中創建一個字符串,那就是其中之一
string(1, str[0])
string(str, 0, 1)
str.substr(0, 1)
string() + str[0]
哪個比較等於a
它們是不同的類型,表達式str[0]+""
是char *
類型( ""
是char *
而不是string
,對於char *
運算符+
沒有重載,所以它的行為是未定義的),但是a
是string
類型,顯然它們不相等。要查看原因,可以運行以下代碼:
cout<<typeid(str[0]+"").name()<<endl;
cout<<typeid(a).name()<<endl;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.