小编Nor*_*non的帖子

为什么这个boost :: container :: string&std :: string比较不按预期工作?

假设你有一个std :: string和一个boost :: container :: string就像这样:

std::string                stdString     =   "This is a test";
boost::container::string   boostString   =   "This is a test";
Run Code Online (Sandbox Code Playgroud)

假设你想比较他们的内容; 以下是不可能的,因为我们无法比较他们的类型:

stdString == boostString                 // no operator "==" matches these operands
Run Code Online (Sandbox Code Playgroud)

然后,您可以选择使用它们的两种方法.c_str()从每个字符串中获取char*.不确定这是否有效地比较字符串,你试试:

stdString.c_str() == boostString.c_str() // compiles, but comparison returns false
Run Code Online (Sandbox Code Playgroud)

然后尝试仅使用std :: string中的c_str()方法:

stdString.c_str() == boostString         // compiles, and comparison seems fine
Run Code Online (Sandbox Code Playgroud)

你出于好奇而尝试相反,它也有效:

stdString == boostString.c_str()         // compiles, and comparison seems fine
Run Code Online (Sandbox Code Playgroud)

所以问题是,为什么这两个后面的比较似乎在第一个没有时正常工作?

奖金问题:这是比较这些字符串内容的不可靠方式吗?

完整代码示例:

#include <boost/container/string.hpp>
#include <iostream>

int main(int argc, char *argv[])
{
  std::string stdString …
Run Code Online (Sandbox Code Playgroud)

c++ string boost string-comparison c++-standard-library

-1
推荐指数
1
解决办法
167
查看次数