حالة غريبة من f؛ لماذا تطبع دائمًا 1 في الإخراج؟
مواجهة سلوك غريب حيث استدعاء دالة بدون أقواس (f؛) وطباعة نتيجتها باستخدام std::cout يؤدي باستمرار إلى الرقم 1 يمكن أن يثير أسئلة. في البداية، قد يتوقع المرء أن يقوم الكود بطباعة مؤشر دالة، لكن الملاحظات تشير إلى خلاف ذلك.
الخوض في الكود أدناه:
#include
using namespace std;
void pr()
{
cout يمكننا أن نرى ذلك العلاقات العامة؛ لا يقوم باستدعاء الدالة pr() من الناحية الفنية. بدلاً من ذلك، يتم تمرير مؤشر الدالة إلى cout. عندما يتم تحويل مؤشر الدالة إلى منطقي أثناء هذه العملية، فإنه يتصرف بشكل أقرب إلى التعبير المنطقي حيث يتم تقييم القيمة غير الصفرية على أنها صحيحة. يُترجم هذا إلى 1 عند الطباعة.
علاوة على ذلك، في معيار ما قبل C 11، لا يوجد حمل زائد يسمح بتدفق مؤشر دالة. وهذا يجعل من الصعب تنسيق مؤشرات الوظائف وطباعتها مباشرة باستخدام std::cout. ومع ذلك، مع ظهور لغة C 11، يمكن للمرء تحديد حمل زائد مخصص لتحقيق هذا:
template
std::ostream & operatorباستخدام هذا التحميل الزائد، ستتم طباعة cout
(func_ptr=)(num_args=0)
هذا المخصص يوضح التحميل الزائد مؤشرات وظيفة الطباعة ذات الدقة المتفاوتة. على الرغم من أنه يخفف مشكلة مؤشرات الوظائف، إلا أنه لا يحل بشكل كامل السيناريوهات التي تتضمن وظائف مثقلة أو قوالب وظائف حيث يصبح تحديد التحميل الزائد المطلوب أمرًا ضروريًا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3