std::string
的STL运算符和重载是否意味着使用operator==
将char*
与std::string
进行比较是安全的,没有限制,即LHS / RHS?
答案 0 :(得分:2)
不,没有限制的是不安全的。 限制是:
char*
不能是空指针。char*
指向的字符序列必须为零分隔(即以\0
结尾)但是你放哪一个以及哪一个正确并不重要 - 它会给出相同的结果。
但有一点需要注意:std::string
可能包含不在最后的\0
个字符。将其中一个与char*
字符序列进行比较将始终为false,因为比较将在\0
中遇到的第一个char*
处停止。
示例:
char c[] = "Hello\0 World!";
std::string s(c, sizeof(c));
std::cout << ((s == c) ? "ok" : "meh") << '\n'; //meh - compares only until the first \0
std::cout << c << '\n'; //Hello - cout also stops at first \0
std::cout << s << '\n'; //Hello World!
答案 1 :(得分:1)
是的,只要您确定char *不是空指针,并且它是以空值终止的,它就是安全的。
答案 2 :(得分:1)
std::string
可以包含多个空字符。但operator==
和std::string
的{{1}}定义为
将字符串的内容与另一个字符串或a进行比较 以空值终止的CharT数组。
该问题的示例:
char*
如果std::string a = "hello";
char* b = "hello\0fellow\0";
bool equals = (a == b); // will give true, though a and b are not the same
字符串未以空值终止,则可能会出现另一个问题。