سؤال

لدي هذا الرمز،

int main()
{
    std::string st;
    std::stringstream ss;
    ss<<"hej hej med dig"<<std::endl;

    std::getline(ss,st,' ');
    std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str();
    std::cout <<"ss.rdbuf() : " << ss.rdbuf();
    return 0;
}

إعطائي هذا الإخراج

ss.rdbuf () -> شارع (): hej hej med dig

ss.rdbuf (): HEJ MED DIG

ولكن لماذا هذا؟ هل هذا بسبب تعريف Ostreams للمشغل

هل كانت مفيدة؟

المحلول

ss.rdbuf()->str();

إرجاع نسخة من جميع المحتوى المخزن المؤقت.

ماذا تفعل std::cout << ss.rdbuf();?

انظر وصف

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);

يقرأ الحرف حسب الشخصية من المخزن المؤقت وكتابةها إلى Ostream، حتى يحدث EOF / فشل في الكتابة / الاستثناء.

لقد قرأت بالفعل كلمة واحدة من برتقالي. الآن قرأت نقطة الراحة.

نصائح أخرى

إلى اقتباس من الكتاب المقدس على دفق C ++ I / O، Langer و Kreft., ، استدعاء STR () على مخزن مؤقت دفق (أي الشيء الذي عاد من قبل RDBuf ()) "يتصرف بطريقة مضادة للغاية" (صفحة 72 في الإصدار الخاص بي). للقصة الكاملة، سيتعين عليك قراءة الكتاب.

إذا لم تحصل على إجابة مرضية هنا، فجرب مجموعة Usenet:

http://groups.google.com/group/comp.lang.c++-moderated.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top