c++:關鍵字異常處理機制

模板編程的幾個關鍵字

  • 模(mu)板編程初體驗
    (1)template和typename
    (2)模板實際上是一種抽象,C++的高級編程特性就是不斷向抽象化發展

  • export
    (1)用來在cpp文件中定義一個模板類或模板函數,而它的聲明在對應的h文件中
    (2)export專用于模板,類似于extern之于簡單類型
    (3)實際很多環境不支持,暫不必細究,看到代碼時能認出即可

  • requires
    (1)C++20引入,用于表示模板的參數約束
    (2)了解即可,暫時不用管

// 寫一個函數add,完成2個數字的加和
// 假如有10種數據類型要考慮,那就要寫10個add的重載函數,非常低效
int add(int a, int b)
{return (a + b);
}double add(double a, double b)
{return (a + b);
}
// 自定義一個抽象類型,譬如命名為X,編程的時候用X編程,X的具體類型在調用函數時
// 由實參的類型來確定
template <typename T> T add(T a, T b) { return (a + b); }int test(void) {char i = 45, j = 6;cout << "a + b = " << add(i, j) << endl;double a = 45.99, b = 6.88;cout << "a + b = " << add(a, b) << endl;return 0;
}

T可以是基本數據類型(如 int、float),也可以是用戶自定義的類、結構體,甚至是其他模板類型。使用 T 可以讓你的代碼適應不同類型的輸入,提高代碼的靈活性。

C++的異常處理機制

  • 何為異常處理
    (1)異常exception,即運行時錯誤
    (2)C中沒有異常機制,所以運行時遇到錯誤只能終止程序
    (3)C++中新增了異常處理機制,允許程序在運行時攔截錯誤并處理,這樣程序就不用終止
    (4)異常機制的一個典型案例就是:由用戶輸入2個數字然后相除中的除0異常

  • 異常處理編程實踐
    (1)try, catch, throw
    (2)異常處理機制為什么優于出錯條件判斷:https://www.cnblogs.com/wkfvawl/p/10816156.html

int test(void) {// 讓用戶輸入2個數,然后程序返回他的相除cout << "please input 2 numbers" << endl;int m, n;cin >> m >> n;// C中我們這樣處理if (n == 0) {cout << "0 not good" << endl;return -1;} else {cout << "m / n = " << m / n << endl;}cout << "---other code---" << endl;return 0;
}
int test(void) {// 讓用戶輸入2個數,然后程序返回他的相除cout << "please input 2 numbers" << endl;int m, n;cin >> m >> n;// C++中用異常處理機制來處理try {// try括號里的代碼就是有可能觸發異常的代碼if (n == 0) {// throw ('A');// throw (-8);throw(6.66);}cout << "m / n = " << m / n << endl;} catch (int e) // catch的()里寫上要抓取的異常類型{cout << "catch int e" << endl;} catch (double e) // catch的()里寫上要抓取的異常類型{cout << "catch double e" << endl;} catch (char e) // catch的()里寫上要抓取的異常類型{cout << "catch char e" << endl;}cout << "---other code---" << endl;return 0;
}
  • 異常和函數
    (2)throw一個異常后如果沒有catch會層層向外傳遞直到被catch為止
    (3)函數可以用throw列表來標識自己會拋出的異常

  • 標準庫中的exception類
    (1)標準庫中定義的異常類及其派生類,很多內置代碼的錯誤會拋出這些異常
    (2)譬如bad_typeid,使用 typeid 運算符時,如果其操作數是一個多態類的指針,而該指針的值為 NULL,則會拋出此異常
    (3)譬如bad_cast,用 dynamic_cast 進行從多態基類對象(或引用)到派生類的引用的強制類型轉換時,如果轉換是不安全的,則會拋出此異常

  • noexcept關鍵字
    (1)throw(int, double, A, B, C)表示函數可能會拋出這5種類型的exception
    (2)throw() 表示函數不會拋出任何異常
    (3)C++11中引入noexcept關鍵字替代throw()表示函數不會拋出任何異常
    noexcept(bool)
    (4)沒有throw列表的函數,表示函數可能會拋出任意類型的異常

剩余關鍵字和總結

剩余一些關鍵字
(1)線程相關:thread_local (C++11 起)
(2)import和module (C++20)
(3)協程相關:
co_await (C++20 起)
co_return (C++20 起)
co_yield (C++20 起)
(4)并發相關:synchronized (TM TS)
(5)反射相關:reflexpr (反射 TS)
(6)其他:
transaction_safe (TM TS)
transaction_safe_dynamic (TM TS)
atomic_cancel (TM TS)
atomic_commit (TM TS)
atomic_noexcept (TM TS)

  • 總結
    (1)C++關鍵字和復雜度遠超過C語言,語言特性較多
    (2)面向對象編程相關特性是C++的基礎核心,占比非常大
    (3)模板泛型和抽象化編程是C++的重要特征,甚至可以說是精髓所在
    (4)和java、python相比,C++的語法細節過多,這也是C++較難學習的重要原因
    (5)不要試圖去記,以理解為主,配合代碼實驗去消化吸收,形成自己對C++的認知
    (6)經典C++與C++11、14、17、20的差異其實就是相應增加的關鍵字帶來的新語言特性

總結

理解模板的概念,會使用template和typename
理解try, catch, throw使用方法

學習記錄,侵權聯系刪除。
來源:朱老師物聯網大課堂

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39063.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

揭秘電子世界的雙雄:模擬電路與數字電路的精彩對決!

數字電路與模擬電路&#xff0c;這兩者在電子工程領域可謂是兩大基石&#xff0c;各有千秋&#xff0c;各自發揮著不可或缺的作用。下面&#xff0c;我們就來詳細探討一下它們之間的主要區別。 1. 信號類型與處理 模擬電路&#xff1a;處理的是連續變化的信號&#xff0c;就像…

使用阿里云語音服務實現設備異常實時通知

隨著物聯網的普及,設備異常通知方式也變得多種多樣。從傳統的后臺異常列表,到短信通知,再到微信消息通知等。然而,當設備探測到火警等緊急異常時,需要實時通知到相關人員。本文將介紹如何借助阿里云的語音服務來實現這一功能。 1. 準備工作 1.1 資質申請 首先,登錄阿里…

Git中fetch與pull 的區別

一、fetch與pull的基本概念 在Git中&#xff0c;fetch和pull都是用于從遠程倉庫獲取數據的命令。但是&#xff0c;它們在處理方式和結果上有所不同。 1、fetch fetch命令用于從遠程倉庫下載最新的數據到本地倉庫&#xff0c;但它不會自動合并或修改當前的工作。fetch會將遠程…

2024年大廠離職當博主成為最擁擠自媒體賽道的現象分析

大廠離職博主在2024年成為最擁擠自媒體賽道的現象分析 1. 行業背景與就業環境變化 降本增效引發的被動離職&#xff1a;近年來&#xff0c;隨著各行業的降本增效措施不斷推進&#xff0c;即便是知名大廠也在縮減員工規模。騰訊、阿里巴巴等企業的財報顯示&#xff0c;從2021年…

一鍵恢復短信,4個方法,輕松找回iPhone數據!

在日常生活和工作中&#xff0c;短信往往承載著重要的信息和回憶。然而&#xff0c;意外刪除、系統故障或手機更換等情況都可能導致短信丟失&#xff0c;這讓很多iPhone用戶感到困擾。 好消息是&#xff0c;您并不需要擔心這些數據無法找回。如今&#xff0c;一鍵恢復短信的方…

autoware.universe源碼略讀(3.7)--perception:elevation_map_loader/euclidean_cluster

autoware.universe源碼略讀3.7--perception&#xff1a;elevation_map_loader/euclidean_cluster elevation_map_loadereuclidean_clustereuclidean_clustervoxel_grid_based_euclidean_cluster節點類launch文件 elevation_map_loader 在上一篇文章有提到compare_map_segmentat…

基于java+springboot+vue實現的家政服務平臺(文末源碼+Lw)299

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本家政服務平臺就是在這樣的大環境下誕生&#xff0c;其可以幫助管理者在短時間內處理完畢龐大的數據信息&a…

Redis中hash類型的操作命令(命令的語法、返回值、時間復雜度、注意事項、操作演示)

文章目錄 字符串和哈希類型相比hset 命令hget 命令hexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloat 字符串和哈希類型相比 假設有以下一種場景&#xff1a;現在要在 Redis 中存儲一個用戶的基本信息(id1、namezhangsan、age17)&#xff0c;下圖表示使用字符串…

2024護網整體工作預案示例

目錄 第1章 HW整體工作工作部署 1.1 工作組織架構 1.2 各部門工作職責 1.3 演練期間工作機制 1.3.1 工作匯報機制 1.3.2 應急響應機制 第2章 系統資產梳理整改 2.1 敏感信息梳理整改 2.2 互聯網資產發現 2.3 第三方供應商梳理 2.4 業務連接單位梳理 第3…

下載nginx搭建的文件服務器(爬蟲)

下載nginx搭建的文件服務器&#xff08;爬蟲&#xff09; windows版 需要下載python包&#xff1a;pip install requests import requests import re import os#開始訪問的url地址&#xff0c;必須以/結尾 index_url "https://www.aaa.com/aaaaa/" #下載到本地的地…

win10顯示毫秒-上午-下午及星期幾,24小時制

關于毫秒 winr regedit 計算機\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 新建ShowSecondsInSystemClock&#xff0c;編輯1顯示&#xff0c;不顯示就刪了它 然后重啟 資源管理器可能有多個全部重啟&#xff0c;就可以啦 根據自己喜好…

黨建科普3D數字化展館支持實時更新迭代

3D虛擬策展逐漸成為新時代下的主流方式&#xff0c;深圳華銳視點作為專業的web3d開發公司&#xff0c;具有專業化的3D數字化空間還原能力&#xff0c;能根據企業/個人不同需求和預算&#xff0c;為您打造純線上虛擬3D藝術展&#xff0c;讓您徹底擺脫實體美術館的限制&#xff0…

面試官:Java文件是如何被加載到內存中的?

面試連環call Java文件是如何被加載到內存中的&#xff1f;Java類的聲明周期都有哪些階段&#xff1f;JVM加載的class文件都有哪些來源&#xff1f;JVM在加載class文件時&#xff0c;何時判斷class文件的格式是否符合要求&#xff1f; 類生命周期 一個類從被加載到虛擬機內存…

【計算機體系結構】緩存的false sharing

在介紹緩存的false sharing之前&#xff0c;本文先介紹一下多核系統中緩存一致性是如何維護的。 目前主流的多核系統中的緩存一致性協議是MESI協議及其衍生協議。 MESI協議 MESI協議的4種狀態 MESI協議有4種狀態。MESI是4種狀態的首字母縮寫&#xff0c;緩存行的4種狀態分別…

【Linux】—Xshell、Xftp安裝

文章目錄 前言一、下載Xshell、Xftp二、安裝Xshell三、使用XShell連接Linux服務器四、修改windows的主機映射文件&#xff08;hosts文件&#xff09;五、遠程連接hadoop102/hadoop103/hadoop104服務器六、安裝Xftp 前言 XShell遠程管理工具&#xff0c;可以在Windows界面下來訪…

[數據集][目標檢測]螺絲螺母檢測數據集VOC+YOLO格式2400張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;2400 標注數量(xml文件個數)&#xff1a;2400 標注數量(txt文件個數)&#xff1a;2400 標注…

SpringBoot 整合 Minio 實現文件切片極速上傳技術

Centos7安裝Minio 創建目標文件夾 mkdir minio使用docker查看目標鏡像狀況 大家需要注意&#xff0c;此處我們首先需要安裝docker&#xff0c;對于相關安裝教程&#xff0c;大家可以查看我之前的文章&#xff0c;按部就班就可以&#xff0c;此處不再贅述&#xff01;&#x…

uniapp入門

一、新建項目 進入到主界面&#xff0c;左上角點擊新建——1.項目 輸入項目名稱&#xff0c;Vue版本選擇3 二、創建頁面 選中左側文件目錄里的pages文件夾&#xff0c;右鍵&#xff0c;選擇新建頁面 1輸入名稱 2選中“創建同名目錄” 3選擇模板&…

將json對象轉為xml進行操作屬性

將json對象轉為xml進行操作屬性 文章目錄 將json對象轉為xml進行操作屬性前端發送json數據格式寫入數據庫格式-content字段存儲&#xff08;varchar(2000)&#xff09;Question實體類-接口映射對象QuestionContent 接收參數對象DAO持久層Mapper層Service層Controller控制層接收…

《每天5分鐘用Flask搭建一個管理系統》第13章:性能優化

第13章&#xff1a;性能優化 13.1 性能優化的重要性 性能優化確保應用能夠處理高并發請求&#xff0c;減少響應時間&#xff0c;提高用戶體驗和應用的可擴展性。 13.2 Flask緩存機制 緩存是提高Web應用性能的關鍵技術之一&#xff0c;它可以減少數據庫查詢次數和服務器計算…