c++ - 对 char* 的平等测试 std::string,operator==() 总是安全的吗?

标签 c++

std::string 的 STL 运算符和重载是否意味着使用 operator== 来比较 char* 是安全的针对 std::string,没有限制,哪个是 LHS/RHS?

最佳答案

不,没有限制是不安全的。 限制是:

  • char* 不能是空指针。
  • char* 指向的字符序列必须以零分隔(即以 \0 结尾)

但是你把哪一个放在左边和哪一个右边并不重要 - 它给出相同的结果。

但有一个警告:std::strings 可能包含 \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/

相关文章:

c++ - 多线程不利用多核?

c++ - 有没有比声明 CStringT<> 的 char 类型适当实例更好的方法

c++ - 2 个指向相同值的指针并仅更改其中一个 - 双链表 C++

c++ - 如何用我自己的实现替换 MS VC++ 项目中的 WinAPI 函数调用(名称和参数集相同)?

c++ - 在特定的 Windows DLL 模块中分配内存

c++ - 动态字符串数组,编译错误

c++ - 性能比较 - pcap 文件读取 : C+ +'s ifstream VS C' s fread

c++ - 零可变宏参数的 GCC 编译器警告标志

c++ - 获取英寸的输出

C++ 用户界面资源