为什么 b[2] 是假的?

Why is b[2] false?

本文关键字:为什么      更新时间:2023-10-16
string s;
bool b[] = {s=="",  s==s.c_str(),  s.c_str()==""};

b[] = {true, true, false};

为什么b[2]是假的?

如果A==BA==C,这不应该意味着B==C吗?

在此表达式中

s.c_str()==""

比较了两个指针(地址(。第一个是s.c_str()返回的指针,第二个是指向字符串文本""的第一个字符(终止零字符(的指针。

很明显,地址是不同的(还要记住,字符串文字具有静态存储持续时间(。

为了获得预期的结果,你应该写

std::strcmp( s.c_str(), "" ) == 0

至于这两种表达方式

s==""

s==s.c_str()

然后是比较字符串,因为标准类 std::string 对正确的操作数有重载运算符 ==。