C++ ให้ คลาสการจัดการข้อยกเว้นมาตรฐาน แก่เรา ซึ่งใช้ในการส่งข้อยกเว้นเมื่อมีการเรียกใช้ฟังก์ชันในไลบรารีมาตรฐาน C++ โครงสร้างลำดับชั้นของคลาสข้อยกเว้นมาตรฐานที่จัดทำโดย C++ เป็นดังนี้:
จะเห็นได้ว่าคลาสข้อยกเว้นทั้งหมดสืบทอดมาจากคลาสฐานข้อยกเว้น Logic_error และ runtime_error ภายใต้คลาสข้อยกเว้นนั้นเป็นสองหมวดหมู่ที่ค่อนข้างใหญ่ รวมถึงคลาสของตัวเองหลายคลาส โดยแบ่งออกเป็นตารางเพื่อแสดง ข้อผิดพลาดทางตรรกะ และ ข้อผิดพลาดรันไทม์
ให้ตัวอย่างเช่น:
1. เมื่อเราใช้ new เพื่อเปิดหน่วยความจำ หากมีเนื้อที่ไม่เพียงพอ ข้อผิดพลาด bad_alloc จะถูกส่งออกไป
2. เมื่อเราใช้ dynamic_cast() เพื่อทำการแปลงประเภทไดนามิกและล้มเหลว ข้อยกเว้น bad_typeid จะถูกส่งออกไป
3. เมื่อค่าที่คำนวณได้เกินช่วงสูงสุดที่แสดงตามประเภท ข้อยกเว้น overflow_error จะถูกส่งออกไป ซึ่งบ่งชี้ถึงการดำเนินการล้น ในทำนองเดียวกัน underflow_error บ่งชี้ถึงการดำเนินการอันเดอร์โฟลว์
4. เมื่อเราใช้ตัวห้อยคลาสสตริงแต่มันอยู่นอกขอบเขต ข้อยกเว้น out_of_range จะถูกส่งออกไป
เดี๋ยว...เดี๋ยวก่อน...โปรดหาข้อมูลเพิ่มเติมด้วยตัวเอง
ควรสังเกตว่าเมื่อใช้คลาสข้อยกเว้นมาตรฐานที่มาพร้อมกับ C ++ คุณจะต้องรวมไฟล์ส่วนหัวที่เกี่ยวข้อง เนื่องจากคลาสข้อยกเว้นและคลาส bad_Exception ถูกกำหนดไว้ในข้อยกเว้นไฟล์ส่วนหัว คลาส bad_alloc ถูกกำหนดในไฟล์ส่วนหัวใหม่ และคลาส bad_typeid ถูกกำหนดไว้ในไฟล์ส่วนหัว typeinfo คลาส ios_base::failure ถูกกำหนดไว้ในไฟล์ส่วนหัว ios และคลาสข้อยกเว้นอื่น ๆ ถูกกำหนดไว้ใน stdยกเว้น
ด้านล่างนี้ ฉันจะแสดงให้คุณเห็นถึงวิธี การใช้คลาสข้อยกเว้นมาตรฐาน C++ :
#include<iostream>#include<new>#include<stdยกเว้น>usingnamespacestd;//การจัดการข้อยกเว้น intmain(){string*s;try{s=newstring(www.dotcpp.com);cout<<s->substr( 15,5);}catch(bad_alloc&t){cout<<ข้อยกเว้นเกิดขึ้น:<<t.what()<<endl;}catch(out_of_range&t){cout<<ข้อยกเว้นเกิดขึ้น:<<t.what()<<endl;} กลับ0;}
ผลการวิ่งมีดังนี้:
โปรดลองด้วยตัวคุณเองและเรียนรู้วิธีใช้งาน!