如何比较boost::string_ref和std::string
How to compare boost::string_ref to std::string
我正试图使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
?
老实说,我只是完全避免使用string_ref
,直到它成熟。事实上,你不能将string_ref
与std::string
或const char *
进行比较,这应该会敲响警钟(看起来他们忘记写一堆比较运算符),更糟糕的是,它看起来没有得到足够的库测试(例如bug 8067!)。
从字符串中生成一个string_ref
。它们的建造成本很低。尽管对于字符串字面值,您可能希望包含长度。否则它会迭代一次来找到字符串的末尾,然后再次迭代来比较它们。只要确保如果你改变了字符串,你保持计数是最新的。
cout << (rtest == boost::string_ref("test",4)) << endl;
对于std::string
,您不需要担心计数,因为string_ref
只会调用size()
成员函数,这也是非常便宜的。
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- C++:考虑C++ std::string 中双引号 (") 的字面含义,而不使用反斜杠 (\)
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- std::string, std::wstring and UTF8
- uan inplace replacement of std::string/std::wstring?
- #define Glib::string std:wstring
- 从 std::string & std::wstring 中获取 char 整数值
- BSTR转换为std::string(std::wstring),反之亦然