std:string和c-string的比较
comparison between std:string and c-string
我正在尝试验证一个类似问题的答案。我遇到了一个问题,因为下面的代码显示,std::string的内容实际上是与char[]的属性进行比较的,而不是指针正如这些答案所暗示的那样。
这是C++11的一个新特性吗?非常感谢您的帮助。
std::string smth = "hello";
char ch[8] = "hello";
if (ch == smth)
cout << "yes!";
else
cout << " no ";
ch[2] = 'W';
if (ch == smth)
cout << "yes!";
else
cout << " no ";
ch[2] = 'l';
if (ch == smth)
cout << "yes!";
else
cout << " no ";
输出为:是!不,是的,而指针绝对不会改变。。
std::string
有一个带有char*
指针的operator==
。
因此,每次执行以下行时:
if (ch == smth)
您不仅可以比较指针,还可以调用类似于strcmp的函数,该函数将比较字符串和指针的数据,如果它们相似,则返回true。
所以不,指针肯定不会改变,但它们的数据会改变。运算符的结果也是如此。
在每一个版本的C++标准中都指定了比较std::string
和const char *
的能力,其结果是比较字符集。具体地,operator==()
和涉及std::string
作为至少一个操作数的其他比较运算符是标准的一部分。
它不是任何C版本的特性,因为std::string
不是C标准库的一部分。所以它不是C11的一个特性。
您链接的问题是比较两个类型为char*
的值。这里的区别在于char*
是指针,而string()
不是指针。当您比较指针时,它会检查指针是否相等,但由于string()
不是指针,它会转到其operator==
,后者会检查字符串内容本身是否相等。
相关文章:
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 比较 std::string 和 C 样式字符串文字
- 与 string.size() 比较时 int 的符号性显示警告
- 如何改进我的"String"对象比较功能
- 比较存储在 std::string 中的数据中的字节数
- 性能比较:f(std::string&&) vs f(T&&)
- 我应该将 std::string 与 "string" 或 "string" s 进行比较吗?
- 将无符号的 int 与 std::string::size_type 进行比较是否安全
- 使用std :: string ::比较(C )的字符串/单词操纵
- 将std::string中的迭代字符与unicode C++进行比较
- 不能对 std::set<std::string, std::less 使用用户提供的比较函数<>>
- "Flattening" std::set<std::string> 用于存储和比较?
- 比较输入的C弦与文件读取c-string
- 如何在 c 中比较和排序向量<string>
- 像strcmp那样比较两个std::string
- 性能比较:strstr()与std::string::find()
- c ++比较std::string将无法工作,如果我不使用Code::Blocks但cygwin编译
- C++ 比较向量<string> X 与字符串 S
- 比较列表<string>和向量<string>中的字符串元素
- 比较向量<string>内的线