我正在尝试使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进行比较?

===============>>#1 票数:5 已采纳

老实说,我只是避免完全使用string_ref直到它成熟为止。 事实上你无法将string_refstd::string或开箱即用的const char *进行比较,这应该会让警钟响起(看起来他们忘了写一堆比较运算符),更糟糕的是,它没有'看起来这个库得到了足够的测试(例如bug 8067 !)。

===============>>#2 票数:1

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

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

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

  ask by Wojciech Danilo translate from so

未解决问题?本站智能推荐: