3

我正在尝试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_ref比较std::string

4

2 回答 2

5

string_ref老实说,在它成熟之前,我会完全避免使用。您无法将 astring_ref与 astd::string或 aconst char *进行开箱即用的比较这一事实应该会敲响警钟(看起来他们忘了写一堆比较运算符),更糟糕的是,看起来库似乎没有接受足够的测试(例如错误 8067!)。

于 2013-04-20T13:17:01.770 回答
1

只需string_ref从字符串中取出。它们的建造成本非常低。尽管针对字符串文字,您可能希望包含长度。否则它将迭代一次以找到字符串的结尾,然后再次迭代以比较它们。只要确保如果您更改字符串,您就会保持计数是最新的。

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

有了 a std::string,你就不用担心计数了,因为string_ref只会调用size()成员函数,这也很便宜。

于 2013-04-15T23:51:59.530 回答