如何将boost :: string_ref与std :: string进行比较

时间:2013-04-15 23:45:31

标签: c++ string boost stl

我试图让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进行比较?

2 个答案:

答案 0 :(得分:5)

老实说,我只是避免完全使用string_ref直到它成熟为止。您无法将string_refstd::stringconst char *开箱即用的事实应该会设置响铃(看起来他们忘了写一堆比较运算符)更糟糕的是,它看起来并不像图书馆接受了足够的测试(例如bug 8067!)。

答案 1 :(得分:1)

只需从字符串中生成string_ref即可。它们构造起来非常便宜。虽然对于字符串文字,但您可能希望包含长度。否则它将迭代一次以找到字符串的结尾,然后再次迭代以比较它们。只要确保如果更改字符串,就可以使计数保持最新状态。

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

使用std::string,您无需担心计数,因为string_ref只会调用size()成员函数,这也非常便宜。