"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا `std::cout

لماذا `std::cout

تم النشر بتاريخ 2024-11-18
تصفح:464

Why does `std::cout

حالة غريبة من 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