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

ما وراء عبارات "if": في أي مكان آخر يمكن استخدام نوع ذو تحويل "bool" صريح بدون الإرسال؟

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

Beyond `if` Statements: Where Else Can a Type with an Explicit `bool` Conversion Be Used Without Casting?

التحويل السياقي إلى منطقي مسموح بدون إرسال

يحدد فصلك تحويلًا صريحًا إلى منطقي، مما يتيح لك استخدام مثيله 't' مباشرة في العبارات الشرطية. ومع ذلك، فإن هذا التحويل الصريح يطرح السؤال: أين لا يمكن استخدام "منطقي" بدون طاقم تمثيل؟

سيناريوهات التحويل السياقي

يحدد معيار C أربعة السيناريوهات الرئيسية حيث يمكن تحويل القيمة إلى السياق منطقي:

العبارات:

  • إذا، أثناء، من أجل، عبارات افعل أثناء

    if (t)
      /* statement */;

التعبيرات:

  • النفي (!)، المنطقي و (&&)، المنطقي OR (||)، عامل التشغيل الثلاثي (؟)

    !t
    t && t2

اختبارات وقت الترجمة:

static_assert، noexcept، صريح، إذا constexpr (يتطلب تحويل constexpr) عامل التشغيل)
  • static_assert(t); noexcept(t)

    static_assert(t);
    noexcept(t)
  • الخوارزميات والمفاهيم:

NullablePointer، وسيطات المسند أو المقارنة في خوارزميات STL
  • NullablePointer T std::remove_if(first, last, [&](auto){ return t; });

    static_assert(t);
    noexcept(t)
  • ملاحظات إضافية:

لا يُسمح بتضييق التحويلات من الأعداد الصحيحة بخلاف 0 و1 في اختبارات وقت الترجمة (C 26 وما بعده).

    الخلط يمكن أن تؤدي عوامل التحويل const وغير const إلى حدوث ارتباك.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3