मैं हाल ही में देखा कि बढ़ावा program_options पुस्तकालय एक logic_error
फेंकता है तो कमांड लाइन इनपुट अन-parsable था। इसने मेरी धारणाओं को logic_error
बनाम runtime_error
के बारे में चुनौती दी।std :: के बारे में उलझन में runtime_error बनाम std :: logic_error
मुझे लगता है कि तर्क त्रुटियां (logic_error
और इसकी व्युत्पन्न कक्षाएं) ऐसी समस्याएं थीं जो आंतरिक विफलताओं के परिणामस्वरूप प्रोग्राम इनवेरिएंट का पालन करती थीं, अक्सर आंतरिक एपीआई के अवैध तर्कों के रूप में। इस संदर्भ में वे काफी हद तक ASSERT के लिए बराबर है, लेकिन जारी किया कोड में इस्तेमाल किया जा करने के लिए होती हैं (ASSERT के जो आम तौर पर जारी किया गया कोड में संकलित नहीं कर रहे हैं के विपरीत है।) वे स्थितियों में, जहां यह डिबग में अलग सॉफ्टवेयर घटक को एकीकृत करने के अव्यवहार्य है में उपयोगी होते हैं/परीक्षण बनाता है या विफलता के परिणाम ऐसे हैं कि उपयोगकर्ता को अमान्य invariant स्थिति के बारे में रनटाइम प्रतिक्रिया देना महत्वपूर्ण है।
इसी तरह, मैंने सोचा था कि runtime_error
रों विशेष रूप से हुई क्रम स्थितियों से प्रोग्रामर के नियंत्रण के बाहर: आई/ओ त्रुटियों, अमान्य उपयोगकर्ता इनपुट, आदि
हालांकि, program_options जाहिर है बड़ी मात्रा में प्रयोग (मुख्य रूप से?) अंतिम-उपयोगकर्ता इनपुट पार्स करने, इसलिए मेरी मानसिक मॉडल के तहत यह निश्चित रूप से बुरा इनपुट के मामले में एक runtime_error
फेंक चाहिए करने का एक साधन के रूप में।
मैं गलत कहां जा रहा हूं? क्या आप अपवाद टाइपिंग के बूस्ट मॉडल से सहमत हैं?
आप इस प्रश्न को बूस्ट उपयोगकर्ता मेलिंग सूची पर क्यों नहीं पूछते हैं? –