C++ 两个值(几乎)相同的字符串在进行相等比较时返回0或1(它们之间的差异为';\0';字符)
在以下代码中:C++ 两个值(几乎)相同的字符串在进行相等比较时返回0或1(它们之间的差异为';\0';字符),c++,string,operator-overloading,C++,String,Operator Overloading,在以下代码中: string x="test"; string y="test"; y += '\0'; cout << (x==y) << endl; string x=“测试”; 字符串y=“测试”; y+='\0'; cout'\0'是一个序数值为0的单个字符operator+=(char)将任何char添加到字符串中,而不考虑其值。比较追加前后的y.size(),您将看到大小增加了1 “\0”是一个字符串文字,一个常量字符[2]包含两个空字符,一个由您显式,一个
string x="test";
string y="test";
y += '\0';
cout << (x==y) << endl;
string x=“测试”;
字符串y=“测试”;
y+='\0';
cout'\0'
是一个序数值为0的单个字符operator+=(char)
将任何char
添加到字符串中,而不考虑其值。比较追加前后的y.size()
,您将看到大小增加了1
“\0”
是一个字符串文字,一个常量字符[2]
包含两个空字符,一个由您显式,一个由编译器隐式。当运算符+=(const char*)
将其视为以C样式null结尾的字符串时,其逻辑长度在第一个null字符处停止,因此其长度实际上为0。比较追加前后的y.size()
,您会发现大小没有变化
operator==
将size()
考虑在内。两个大小不同的字符串将返回false。两个大小相同的字符串将比较其所有char
s,包括嵌入的空字符 只需阅读源代码和/或规范(例如cppreference.com)。顺便说一句:这也解释了“非空终止”。但是,请仔细阅读,因为“not null terminated”表示null是一个常规的非终止元素值。“\0”
是一个长度为零的C样式字符串,并被转换为空的std::string
“\0”
--
+
看到这是一个C字符串文本,因此将搜索第一个空字节以终止。猜猜第一个空字节在哪里?您还可以将“he\0ho”的
(文本字符串后缀)与std::string(“he\0ho”)
进行比较。后者std:string
不包含o
。
string x="test";
string y="test";
y += "\0";
cout << (x==y) << endl;