部分文字列に対する操作で、以下のような処理をよく書くと思います。
#include <string> std::string extract_part(const std::string& str) { return str.substr(2, 3); } int main() { if (extract_part("ABCDEFG").front() == 'C') { ... } }
std::stringのメンバ関数を使いたいからchar配列からstd::stringに変換し、部分文字列を得るためにsubstr()メンバ関数を使っています。
しかしそのためにstd::stringの一時オブジェクトができてしまうので、効率はよくありません。
Boost 1.53.0から、このような場合に使用するstring_refというクラスが導入されました。これは以下のように使用します。
#include <boost/utility/string_ref.hpp> boost::string_ref extract_part(boost::string_ref str) { return str.substr(2, 3); } int main() { if (extract_part("ABCDEFG").front() == 'C') { ... } }
boost::string_refは、内部的に文字配列へのポインタと長さのみを持つため、一時的な操作のためにフリーストアが必要になることはありません。
ここではchar配列をstring_refに渡していますが、std::basic_stringオブジェクトもstring_refに渡せます。
参照:
string_ref class - Boost Utility Library