如何比较boost::string_ref和std::string

How to compare boost::string_ref to std::string

本文关键字:string std ref boost 何比较 比较      更新时间:2023-10-16

我正试图使boost::string_ref按照我想要的工作,但我现在面临一个问题-以下代码不编译:

 #include <boost/utility/string_ref.hpp> 
 #include <iostream> 
 #include <string> 
 using namespace std;
int main() {
   string test = "test";
   boost::string_ref rtest(test);
   cout << (rtest == "test")<<endl;
}

和gcc抛出30kB的错误日志,从

开始
source.cpp: In function 'int main()':
source.cpp:10:19: error: no match for 'operator==' (operand types are 'boost::string_ref {aka boost::basic_string_ref<char, std::char_traits<char> >}' and 'const char [5]')
    cout << (rtest == "test")<<endl;
                   ^

如何比较boost::string_refstd::string ?

老实说,我只是完全避免使用string_ref,直到它成熟。事实上,你不能将string_refstd::stringconst char *进行比较,这应该会敲响警钟(看起来他们忘记写一堆比较运算符),更糟糕的是,它看起来没有得到足够的库测试(例如bug 8067!)。

从字符串中生成一个string_ref。它们的建造成本很低。尽管对于字符串字面值,您可能希望包含长度。否则它会迭代一次来找到字符串的末尾,然后再次迭代来比较它们。只要确保如果你改变了字符串,你保持计数是最新的。

cout << (rtest == boost::string_ref("test",4)) << endl;

对于std::string,您不需要担心计数,因为string_ref只会调用size()成员函数,这也是非常便宜的。