سؤال

   int somefunction(bool a)
    {
      try
      {
        if(a)
        throw Error("msg");
        return 2;
      }
     catch (Error const & error)
     {
       //do i need to return anything here??
       //return -1;
     }
    }
هل كانت مفيدة؟

المحلول

وتحتاج إلى إما العودة شيء أو إعادة رمي استثناء (أو رمي واحد جديد). يمكنك rethrow نفس الاستثناء فقط باستخدام الكلمة

throw

وفي كتلة الصيد دون استثناء أو الحجج بعد ذلك.

نصائح أخرى

إذا كنت لن يعود أي شيء هناك، والمستدعي وربما تفعل الشيء الخطأ بعد ذلك لأنه سيتم غير معرفة قيمة الإرجاع وربما يحصل أحد رموز عودة صالحة! جرب هذا:

printf("%i\n", somefunction(false));
printf("%i\n", somefunction(true));

وإخراج:

2
2293512

والمترجم يعطي أيضا تحذيرا لهذا (f.e. "السيطرة تصل إلى نهاية وظيفة غير لاغية").

وتقوم الدالة بإرجاع عدد صحيح، لذلك تحتاج للعودة عدد صحيح. البديل ليس للقبض على استثناء في وظيفة والسماح لها نشر.

أولاً، من خلال التقاط الاستثناء الذي وضعته في السطر 9 في السطر 6، فإنك تسيء استخدام الاستثناءات.أنت تفعل بشكل أساسي ما يمكنك فعله بالتدفق العادي للبرنامج، باستخدام عبارة "if".من خلال إضافة الاستثناءات التي تم طرحها بهذه الطريقة إلى قاعدة التعليمات البرمجية الخاصة بك، لن يعد صحيحًا أن الاستثناءات تُستخدم في المواقف الاستثنائية حقًا.عندما يكون هناك بديل بسيط، يفضل عدم طرح استثناءات من وظائفك.

ومع ذلك، يمكنك الخروج من int تعمل بطريقتين:

  • عودة ان int
  • رمي استثناء

وإلا إذا كنت rethrow باستثناء ستحتاج للعودة عدد صحيح (ويفترض قيمة الحارس خطأ).

واعتمادا على إعدادات المترجم / المترجم الخاص بك، فإنك لن تكون قادرا على تجميع الباحث عودته الوظيفة التي يمكن أن تترك دون قيمة الإرجاع، أي "تنفيذ تصل إلى نهاية وظيفة غير لاغية". لذلك نعم، يجب إرجاع قيمة، إلا إذا كنت تريد rethrow الاستثناء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top