为什么 b[2] 是假的?

Why is b[2] false?

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()

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