0

次の違いは何ですか

stringstream a;
stringstream b;
a << "hi";
b << "there";

a << " " << b.rdbuf();またはa << " " << b.str();またはa << " " << b.str().c_str();


私はrdbuf()を使用しています。私は、C++リファレンスがstringstream:: rdbuf:について述べていることに気づきました。

正常に構築されたistringstreamオブジェクトの場合、バッファ文字列が空であっても、このポインタがNULLになることはないことに注意してください。

私はそれをrdbuf()がNULLを返さないことを意味すると思いますか?NULLを渡すことはできません。私はこのような欠点がありましたchar *array = NULL; a << array;。stringstream bが空の場合、実行時に動作が定義されていa << b.rdbuf() << "some text"ますか?その場合、rdbufによって返される最初の文字にはeof特性があるので、bには何も追加されませんか?

ありがとう

4

1 に答える 1

5

違いはなんですか ?

これらはすべて実質的に同等ですが、パフォーマンスや効率が異なる場合があります。

私はそれをrdbuf()がNULLを返さないことを意味すると思いますか?

あなたはそれを正しく受け止めます。

stringstream bが空の場合、動作は定義されていますか?

はい。

その場合、rdbufによって返される最初の文字にはeof特性がありませんか?

いいえ。.sgetc()(または.snextc())への最初の呼び出しは、eof特性を持つ文字を返しません。EOF(文字ではありません)を返します。したがって、あなたの例は。と同等になりa << "" << "some text"ます。

于 2012-05-11T19:35:10.063 に答える