كيف std::ostringstream تحويل منطقي?
-
08-07-2019 - |
سؤال
أنا تعثرت عبر هذا القانون.
std::ostringstream str;
/// (some usage)
assert( ! str );
ماذا ostringstream
يعني عندما تستخدم في bool
السياق ؟
هذا ربما غير صحيحة الاستخدام يحدث تجميع و تشغيل ؟
المحلول
فإنه يقول لك إذا كان تيار حاليا سارية المفعول.هذا هو شيء أن كل تيارات يمكن القيام به.ملف ستريم ، على سبيل المثال ، يمكن أن يكون باطلا إذا كان الملف لم يفتح بشكل صحيح.
كملاحظة جانبية, هذه الوظيفة (اختبار تيار كما منطقي) يتحقق من خلال إثقال explicit operator bool
في C++11 وما بعدها و من التحميل الزائد void*
يلقي المشغل في الإصدارات قبل C++11.
هنا هو ارتباط تحتوي على بعض الأمثلة لماذا تيار قد تفشل.هذه ليست محددة إلى سلسلة تيارات, ولكنها لا تنطبق عليهم.
تحرير: تغيرت bool
إلى void*
بعد مارتن نيويورك أشار إلى خطأ.
نصائح أخرى
للرجوع إليها: ostringstream::مشغل باطل*() و ostringstream::المشغل!().
التعبير هو صالح ولا يقيم الدولة من تيار.هذه الميزة هي أكثر شيوعا في إدخال تيارات:
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
أنا لست متأكدا من أي من مستوى تدفق وظائف يمكن أن يسبب ostringstream الذهاب سيئة ، ولكن أنت بالتأكيد يمكن أن يكتب واحد نفسك.