11
string s;
bool b[] = {s=="",  s==s.c_str(),  s.c_str()==""};

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

为什么是b[2]假的?

如果A==BA==C,那不应该暗示B==C吗?

4

1 回答 1

14

在这个表达式中

s.c_str()==""

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

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

要获得预期的结果,您应该改写

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

至于这两个表达

s==""

s==s.c_str()

然后是比较字符串,因为标准类 std::string 为右操作数重载了 operator ==。

于 2019-10-17T16:58:09.033 回答