我试图让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
进行比较?
答案 0 :(得分:5)
老实说,我只是避免完全使用string_ref
直到它成熟为止。您无法将string_ref
与std::string
或const char *
开箱即用的事实应该会设置响铃(看起来他们忘了写一堆比较运算符)更糟糕的是,它看起来并不像图书馆接受了足够的测试(例如bug 8067!)。
答案 1 :(得分:1)
只需从字符串中生成string_ref
即可。它们构造起来非常便宜。虽然对于字符串文字,但您可能希望包含长度。否则它将迭代一次以找到字符串的结尾,然后再次迭代以比较它们。只要确保如果更改字符串,就可以使计数保持最新状态。
cout << (rtest == boost::string_ref("test",4)) << endl;
使用std::string
,您无需担心计数,因为string_ref
只会调用size()
成员函数,这也非常便宜。