18

std::ostringstreamというオブジェクトがあれば、文字列を出力ossできることがわかりstd::cout << oss.str()ます。ただし、これを行うoss.str()と、返された文字列がコピーされます。基になるものを直接印刷する方法はありstreambufますか?

前もって感謝します!

4

1 に答える 1

24

を使用している場合ではありませんstd::ostringstream。このための基礎となるバッファは (したがってoin ostringstream) から読み取ることができないため、 を介して実装に依存する必要がありますstr()

ただし、std::stringstream( がないことに注意してくださいo) を使用する場合、基になるバッファーは読み取り可能であり、 にはbasic_ostreamバッファーから読み取るための特別なオーバーロードがあります。

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss1;
    ss1 << "some " << 111605 << " stuff" << std::flush;

    std::cout << ss1.rdbuf() << std::endl;
    std::cout << ss1.str() << std::endl;
}

出力:

いくつかの 111605 のもの
いくつかの 111605 のもの

ここから派生した例。)

これは、中間コピーなしで、基になるバッファーから直接コピーします。

于 2013-03-26T05:41:21.117 に答える