স্ট্যান্ডার্ড সি ++ লাইব্রেরিতে কোন ব্যতিক্রম ক্লাস রয়েছে


102

স্ট্যান্ডার্ড সি ++ গ্রন্থাগারের অন্তর্ভুক্ত ব্যতিক্রম শ্রেণিগুলি কী কী এবং সেগুলি কীসের জন্য ব্যবহার করা উচিত? আমি জানি যে কয়েকটি নতুন সি ++ ১১ টি ব্যতিক্রম রয়েছে, তবে আমি নিশ্চিত নই যে তারা কী বা তারা কোথায়।

উত্তর:


124
std::exception <exception> interface (debatable if you should catch this)
    std::bad_alloc <new> failure to allocate storage
        std::bad_array_new_length <new> invalid array length
    std::bad_cast <typeinfo> execution of an invalid dynamic-cast
    std::bad_exception <exception> signifies an incorrect exception was thrown
    std::bad_function_call <functional> thrown by "null" std::function
    std::bad_typeid <typeinfo> using typeinfo on a null pointer
    std::bad_weak_ptr <memory> constructing a shared_ptr from a bad weak_ptr
    std::logic_error <stdexcept> errors detectable before the program executes
        std::domain_error <stdexcept> parameter outside the valid range
        std::future_error <future> violated a std::promise/std::future condition
        std::invalid_argument <stdexcept> invalid argument
        std::length_error <stdexcept> length exceeds its maximum allowable size
        std::out_of_range <stdexcept> argument value not in its expected range
    std::runtime_error <stdexcept> errors detectable when the program executes
        std::overflow_error <stdexcept> arithmetic overflow error.
        std::underflow_error <stdexcept> arithmetic underflow error.
        std::range_error <stdexcept> range errors in internal computations
        std::regex_error <regex> errors from the regular expression library.
        std::system_error <system_error> from operating system or other C API
            std::ios_base::failure <ios> Input or output error

উত্স: http://en.cppreferences.com/w/cpp/error/exception
অনুশীলনে, বেশিরভাগ ব্যতিক্রমগুলি হ'ল logic_errorএবং থেকে প্রাপ্ত কাস্টম ব্যতিক্রম runtime_error। এগুলি অবহেলিত নয়, তবে অনেকগুলি ব্যতিক্রমই ডোমেন নির্দিষ্ট specific

মনে রাখবেন যে একটি ব্যতিক্রম কী ভুল হয়েছে তা প্রতিফলিত করা উচিত এবং কে এটিকে ছুঁড়েছিল তা নয়। (কোনও "মাইপ্রগ্রাম এক্সেক্সেশন" গুলি)


bad_function_call, domain_error, and future_errorএমএসডিএন-তে এগুলি সবচেয়ে খারাপভাবে বর্ণিত এবং ব্যাখ্যা করা হয়েছে :(
মিঃ আনুবিস

bad_function_callযখন আপনার ডিফল্ট-নির্মান std :: ফাংশন অবজেক্ট থাকে তখন নিক্ষেপ করা হয় এবং আপনি যে ফাংশনটিকে আবৃত করেন তাকে কল করার চেষ্টা করেন। যেহেতু কোনও মোড়ানো ফাংশন নেই, কল করার কিছুই নেই।
পিট বেকার

1
bad_function_callযখন আপনি অনুরোধ করার চেষ্টা করেন std::functionনা যে প্রস্তুত নয় (ওরফে, ডিফল্ট নির্মিত বা নাল্প্টারের মাধ্যমে স্পষ্টভাবে সাফ) thrown future_errorআপনি যখন promiseএবং এর জন্য ফাংশনগুলির অনেক পূর্বশর্তগুলির একটি লঙ্ঘন করেন তখন ব্যবহৃত হয় future। এবং domain_errorএটি (তত্ত্বের ক্ষেত্রে) ক্ষেত্রে কোনও ফাংশনের ইনপুট সেই ফাংশনের জন্য বৈধ সীমার বাইরে (যেমন এর জন্য নেতিবাচক সংখ্যা std::sqrt)।
ডেভ এস

future_errorযখন অনুরোধ করা অপারেশনটি অবৈধ হয় বা অবৈধটিকে অবৈধ অবস্থায় ফেলে দেয় তখন ফিউচারগুলিতে বিভিন্ন অপারেশন দ্বারা নিক্ষেপ করা হয়। এটি সি ++ 11 এ নতুন স্টাফ এবং আমি কোনও মন্তব্যে টিউটোরিয়ালটি ফিট করতে পারি না।
পিট বেকার

3
cppreferences এর উত্সযুক্ত শ্রেণীর তালিকাবদ্ধ করে std::exceptionএবং সেগুলি সি ++ 11 কিনা (বিশেষত, std::ios_base::failureএখান থেকে সরানো std::exceptionহয়েছে std::system_error) তা নোট করে । ব্যবহার এবং শিরোনাম এক লিঙ্ক দূরে।
ইকামত্মুর

50

এই সাইটটি দেখুন

এখানে চিত্র বর্ণনা লিখুন

Exception               Description
===================================
std::exception          An exception and parent class of all the standard C++ exceptions.
std::bad_alloc          This can be thrown by new.
std::bad_cast           This can be thrown by dynamic_cast.
std::bad_exception      This is useful device to handle unexpected exceptions in a C++ program
std::bad_typeid         This can be thrown by typeid.
std::logic_error        An exception that theoretically can be detected by reading the code.
std::domain_error       This is an exception thrown when a mathematically invalid domain is used
std::invalid_argument   This is thrown due to invalid arguments.
std::length_error       This is thrown when a too big std::string is created
std::out_of_range       This can be thrown by the at method from for example a std::vector and std::bitset<>::operator[]().
std::runtime_error      An exception that theoretically can not be detected by reading the code.
std::overflow_error     This is thrown if a mathematical overflow occurs.
std::range_error        This is occured when you try to store a value which is out of range.
std::underflow_error    This is thrown if a mathematical underflow occurs.

এটি ভাল, তবে সি ++ 11 ব্যতিক্রম অনুপস্থিত রয়েছে এবং কোন শিরোলেখগুলিতে কোন ব্যতিক্রম রয়েছে তা দেখায় না।
হাঁস মুচিং

3
@MooingDuck আপনার প্রশ্নটি ট্যাগ করা হয়েছে c++, না c++11, এবং তারা সবই তো একই রকম বসবাস<stdexcept>
TemplateRex

6
সি ++ এর অর্থ সর্বশেষতম সংস্করণ যাই হোক না কেন, যখন সি ++ 11 এবং সি ++ 03 সেই নির্দিষ্ট সংস্করণগুলি সম্পর্কে প্রশ্ন । আমার প্রশ্নটি নির্দিষ্ট সংস্করণ সম্পর্কে নয়, সি ++-এ সর্বাধিক আপ টু ডেট। যে কোনও উপায়ে, আমি সি ++ 11 উল্লেখ করার জন্য প্রশ্নটি সম্পাদনা করব। এছাড়াও, ঐ সমস্ত ত্রুটিগুলি না হয় <stdexcept>যেমন দেখানো ideone.com/uqM6h
গরুর হাঁসের

1
@ মুভিংডাক যদি বিশেষভাবে না জিজ্ঞাসা করা হয়, তবে সি ++ 03 এর উত্তর সি ++ 11 এর মতোই বৈধ। সমস্ত প্রয়োজনীয় তথ্য সরবরাহ করা আপনার দায়িত্ব ছিল। আপনার কখনই দুর্বল প্রশ্ন থেকে মানের উত্তর পাওয়ার আশা করা উচিত নয়। সময়কাল।
ফিল 1970

std::logic_errorনা std::logic_failure। সেই চিত্রটি ভুল!
গ্যালাক্সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.