std::string
的 STL 运算符和重载是否意味着使用 operator==
来比较 char*
是安全的针对 std::string
,没有限制,哪个是 LHS/RHS?
最佳答案
不,没有限制是不安全的。 限制是:
char*
不能是空指针。char*
指向的字符序列必须以零分隔(即以\0
结尾)
但是你把哪一个放在左边和哪一个右边并不重要 - 它给出相同的结果。
但有一个警告:std::string
s 可能包含 \0
不在末尾的字符。将其中一个与 char*
字符序列进行比较将始终给出 false,因为比较将在 char*
中遇到的第一个 \0
处停止>.
例子:
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!
关于c++ - 对 char* 的平等测试 std::string,operator==() 总是安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22710773/