طباعة مؤشر دالة بدون استدعاء: فهم المخرجات الغامضة لـ 1
في مقتطف تعليمات برمجية مثير للاهتمام، يتم "استدعاء" دالة بدون استدعاء الأقواس ("pr؛") ثم طباعتها باستخدام std::cout. ومن المثير للدهشة أن النتيجة تنتج باستمرار 1، متحدية التوقعات.
لغز الثابت 1s
يستدعي الكود الدالة pr بثلاث طرق مختلفة:
cout يقترح الحدس أنه يجب طباعة مؤشر دالة بدلاً من الرقم 1 المبهم. ومع ذلك، فإن فهم هذا السلوك يتطلب التعمق في آليات تحويل النوع C.
تحويل النوع والقيم المنطقية
عند تمريرها كوسيطة إلى cout، يكون pr ضمنيًا تم تحويله إلى بول. يحدث هذا التحويل لأن bool هو نوع أساسي، ويتطلب cout نوعًا أساسيًا كمدخل. في لغة C، تكون القيمة المنطقية المحولة صحيحة إذا كانت القيمة الأصلية غير صفرية وخاطئة إذا كانت صفرًا.نظرًا لأن pr هو مؤشر دالة، فإن قيمته هي عنوان ذاكرة غير صفري. وبالتالي، عند التحويل إلى منطقي، يتم تقييمه إلى صحيح، والذي يتم إخراجه كـ 1 بواسطة cout.
تخصيص طباعة مؤشر الوظيفة (C 11 وما بعده) يقدم C 11 تحميل زائد قابل للتخصيص يسمح بطباعة أكثر إفادة لمؤشرات الوظائف:
القالب
std::ostream &operator template
std::ostream & operatorcout
يوفر هذا الأسلوب مخرجات وصفية أكثر، مما يسهل فهم خصائص مؤشر الدالة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3