読者です 読者をやめる 読者になる 読者になる

stringstreamのstr()メンバ関数は、バッファの消費に関係なく全ての文字列を返す

C++

ちょっと嵌ってた。

std::stringstream::str()メンバ関数は、事前にバッファを消費しても、消費に関係なく全文字列を返すようです。

#include <iostream>
#include <sstream>

int main()
{
    std::istringstream ss("0123456789");

    const std::size_t N = 3;
    char buffer[N + 1] = {};
    ss.read(buffer, N); // 3バイト読む&消費する

    std::cout << buffer << std::endl;
    std::cout << ss.str() << std::endl; // 消費してない(残りの全部文字列を取得することを意図してる)
}

出力:

012
0123456789

バッファの消費を利用したコードを書くときは、このメンバ関数は使えなさそう。