لماذا Stringstreams Rdbuf () و STR () تعطيني إخراج مختلف؟
-
05-09-2019 - |
سؤال
لدي هذا الرمز،
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:
لا تنتمي إلى StackOverflow