为什么 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==B
和A==C
,那不就意味着B==C
吗?
在这个表达式中
s.c_str()==""
比较了两个指针(地址)。第一个是 s.c_str()
返回的指针,第二个是指向字符串文字 ""
.
的第一个字符(终止零字符)的指针
很明显地址不同(还要记住字符串文字具有静态存储持续时间)。
要获得预期的结果,您应该改写
std::strcmp( s.c_str(), "" ) == 0
至于这两个表达式
s==""
和
s==s.c_str()
然后是比较字符串,因为标准 class std::string 为右操作数重载了运算符 ==。
string s;
bool b[] = {s=="", s==s.c_str(), s.c_str()==""};
套
b[] = {true, true, false};
为什么 b[2]
是错误的?
如果A==B
和A==C
,那不就意味着B==C
吗?
在这个表达式中
s.c_str()==""
比较了两个指针(地址)。第一个是 s.c_str()
返回的指针,第二个是指向字符串文字 ""
.
很明显地址不同(还要记住字符串文字具有静态存储持续时间)。
要获得预期的结果,您应该改写
std::strcmp( s.c_str(), "" ) == 0
至于这两个表达式
s==""
和
s==s.c_str()
然后是比较字符串,因为标准 class std::string 为右操作数重载了运算符 ==。