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

1

string_ref文字列を作るだけです。それらは非常に安価に構築できます。文字列リテラルに対してですが、長さを含めたい場合があります。それ以外の場合は、文字列の末尾を見つけるために 1 回反復し、それらを比較するためにもう一度反復します。文字列を変更した場合は、カウントを最新の状態に保つようにしてください。

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

を使用するstd::stringと、カウントについて心配する必要はありません。メンバー関数をstring_ref呼び出すだけsize()であり、これも非常に安価です。

于 2013-04-15T23:51:59.530 に答える