سؤال

أنا تعثرت عبر هذا القانون.

    std::ostringstream str;
    /// (some usage)
    assert( ! str );

ماذا ostringstream يعني عندما تستخدم في bool السياق ؟

هذا ربما غير صحيحة الاستخدام يحدث تجميع و تشغيل ؟

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

المحلول

فإنه يقول لك إذا كان تيار حاليا سارية المفعول.هذا هو شيء أن كل تيارات يمكن القيام به.ملف ستريم ، على سبيل المثال ، يمكن أن يكون باطلا إذا كان الملف لم يفتح بشكل صحيح.

كملاحظة جانبية, هذه الوظيفة (اختبار تيار كما منطقي) يتحقق من خلال إثقال explicit operator bool في C++11 وما بعدها و من التحميل الزائد void* يلقي المشغل في الإصدارات قبل C++11.

هنا هو ارتباط تحتوي على بعض الأمثلة لماذا تيار قد تفشل.هذه ليست محددة إلى سلسلة تيارات, ولكنها لا تنطبق عليهم.

تحرير: تغيرت bool إلى void* بعد مارتن نيويورك أشار إلى خطأ.

نصائح أخرى

التعبير هو صالح ولا يقيم الدولة من تيار.هذه الميزة هي أكثر شيوعا في إدخال تيارات:

istringstream is;
is.str( "foo" );
int x;
is >> x;

if ( ! is ) {
   cerr << "Conversion failed";
}

أنا لست متأكدا من أي من مستوى تدفق وظائف يمكن أن يسبب ostringstream الذهاب سيئة ، ولكن أنت بالتأكيد يمكن أن يكتب واحد نفسك.

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