c++ [[nodiscard]]關鍵字詳解

如果一個函數聲明了[[nodiscard]],則該函數的返回值不能沒有承接,如果沒有承接,就會編譯報warning

[[nodiscard]]是c++17新特性,但本地用c++11標準編譯也能編譯過,尚不清楚原因,c++20加入了warning后的額外文字描述功能

測試代碼

struct [[nodiscard]] error_info { /*...*/ };
error_info enable_missile_safety_mode() { /*...*/ return {}; }
void launch_missiles() { /*...*/ }
void test_missiles()
{enable_missile_safety_mode(); // compiler may warn on discarding a nodiscard valuelaunch_missiles();
}
error_info& foo() { static error_info e; /*...*/ return e; }
void f1() { foo(); } // nodiscard type is not returned by value, no warning
// nodiscard( string-literal ) (since C++20):
[[nodiscard("PURE FUN")]] int strategic_value(int x, int y) { return x ^ y; }int main()
{strategic_value(4, 2); // compiler may warn on discarding a nodiscard valueauto z = strategic_value(0, 0); // ok: return value is not discardedreturn z;
}

一個疑問:
為什么nodiscard屬性不是默認值,似乎返回值沒有被利用就是一個bug才對

解答:
因為考慮向后兼容,如果改為默認的話,那之前編寫的代碼將會發出警告,雖然可以編譯成功,但這將是個重大的語義變化,新語言使用這個特性作為默認是有道理的,因為不用考慮兼容問題,如Nim語言

nodiscard使用場景:

  • 如果一個函數除了返回某個結果之外沒有其他作用,即是純的。如果不使用結果,則調用肯定是無用的
  • 如果一個返回值必須被檢查,比如返回錯誤碼

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

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

相關文章

代碼隨想錄第45天|● 70. 爬樓梯 (進階) ● 322. 零錢兌換 ● 279.完全平方數

文章目錄 ● 70. 爬樓梯 (進階)思路:- 排列 先value后weight代碼: ● 322. 零錢兌換思路:代碼 ● 279.完全平方數思路:代碼 ● 70. 爬樓梯 (進階) 思路:- 排列 先value后…

如何提升計算機性能

04 穿越功耗墻,我們該從哪些方面提升“性能”? 上一講,在講 CPU 的性能時,我們提到了這樣一個公式: 程序的 CPU 執行時間 指令數CPIClock Cycle Time 這么來看,如果要提升計算機的性能,我們可以…

zookeeper框架

事務ID Znode的創建刪除,更改內容等都是作為zookeeper的事務進行執行的。 對于每一個事務請求,zookeeper都會為其分配一個全局唯一的事務ID,從ID可以識別出事務的全局順序。 節點特性 czxid:create zxid,數據節點創建時的事務ID mzxid&…

基于ZYNQ的PCIE高速數據采集卡的設計(一)

作為信息處理的第一步,數據采集的作用越來越重要。目前,數據采集已經在航 空、民用、軍事、醫療等領域得到廣泛應用。隨著相關技術的不斷發展,信號頻率越 來高,帶寬越來越大,使得數據采集技術逐漸向高速大數據的方向…

【python】優化docker鏡像體積

背景 測試腳本的最終所構成的鏡像體積偏大,項目提出整改 實現思路 1.測試基礎鏡像,更換為更小的 參見:python 多階段構建docker鏡像,有效減少鏡像大小 - 知乎 2.去掉實際未使用的依賴庫

幻獸帕魯專用服務器搭建之Linux部署配置教程

大家好我是飛飛,上一期我分享了Windows系統的幻獸帕魯服務器搭建教程。因為幻獸帕魯這游戲對服務器的配置有一定的要求,很多小伙伴就尋思用Linux系統搭建占用會不會小一點?有計算機基礎的小伙伴都知道Linux系統和Windows系統相比,…

【Linux】實時查看服務器信息

查看服務器CPU使用率 使用命令mpstat 1。這里的1表示每隔1秒更新一次CPU使用率。如果系統未安裝mpstat,可以通過安裝sysstat包來獲取它。 在基于Debian的系統(如Ubuntu)上,使用命令: sudo apt-get update sudo apt-…

JavaScript 數據類型詳解的教程

在JavaScript中,數據類型是非常重要的概念,了解數據類型有助于我們更好地操作數據以及編寫高效的代碼。本教程將詳細介紹JavaScript中的各種數據類型,包括基本數據類型和復雜數據類型。 基本數據類型 1. 數值(Number) 在JavaScript中&…

考研復試類比社團招新,無所謂“公平”,導師選誰都是他的權力

這篇文章是抖音和b站上上傳的同名視頻的原文稿件,感興趣的csdn用戶可以關注我的抖音和b站賬號(GeekPower極客力量)。同時這篇文章也為視頻觀眾提供方便,可以更加冷靜地分析和思考。文章同時在知乎發表。 我考研一戰的時候計算機考…

MySQL 主從復制配置指南

MySQL 主從復制配置指南 MySQL主從復制允許數據從一個MySQL數據庫服務器(主服務器)復制到一個或多個MySQL數據庫服務器(從服務器)。這是一種常用的數據冗余和備份方法,也可以用于負載均衡。 前提條件 主服務器和從服…

【詳識JAVA語言】面向對象程序三大特性之一:封裝

封裝的概念 面向對象程序三大特性:封裝、繼承、多態。而類和對象階段,主要研究的就是封裝特性。何為封裝呢?簡單來說 就是套殼屏蔽細節。 比如:對于電腦這樣一個復雜的設備,提供給用戶的就只是:開關機、通…

飛槳模型轉ONNX模型教程

文章目錄 飛槳模型轉ONNX模型教程1. ONNX簡介2. Paddle2ONNX安裝3. 獲取Paddle2ONNX模型庫4. 飛槳轉ONNX教程4.1 飛槳訓練模型導出為ONNX模型4.2 飛槳部署模型轉為ONNX模型4.3 驗證ONNX模型4.4 使用ONNX模型進行推理 5. 注意事項 飛槳模型轉ONNX模型教程 1. ONNX簡介 ONNX是一…

管理系統提升:列表頁構成要素,拒絕千篇一律

大家伙,我是大千UI工場,專注UI知識案例分享和接單,本期帶來B端系統列表頁的分享,歡迎大家關注、互動交流。 一、什么是列表頁 管理系統列表頁是指管理系統中用于展示和管理數據的頁面,通常以表格或列表的形式呈現。列…

【appium】APP元素操作Api、androidDriver操作Api

一、元素操作Api 主要是做斷言 text 1、click()——觸發當前元素的點擊事件 2、sendKeys(...)——輸入數據 3、clear()——清空內容 4、getAttribute() ——獲取屬性值 字符串類型屬性: content-desc(返回content-desc屬性值) text(返…

C語言中結構體成員訪問操作符的含義及其用法

1.直接訪問操作符 用法&#xff1a;結構體名.成員名。 含義&#xff1a;直接訪問結構體中的成員變量。 示例&#xff1a; #include<stdio.h> struct student {char name[20];int age; }; int main() {//定義了一個結構體數組arrstruct student arr[4] { {"cxk&q…

產品經理相關的學習網站

一、原型案例 AxureShop產品原型網&#xff1a; https://www.axureshop.com/ 人人都是產品經理&#xff1a;https://www.woshipm.com/ 二、如何找各類圖標、各類圖表 各類圖標&#xff1a; IconPark&#xff1b; 各類圖表&#xff1a;echarts.apache.org&#xff08;柱狀圖、餅…

深入淺出HTTP/2預檢請求(CORS Preflight Request)

前言 在現代Web開發中&#xff0c;跨域資源共享&#xff08;Cross-Origin Resource Sharing&#xff0c;簡稱CORS&#xff09;是一項關鍵技術&#xff0c;它允許瀏覽器在不同源之間安全地執行Ajax請求。當一個來自不同源的請求涉及到一些特殊 HTTP 頭部或者方法時&#xff0c;…

23端口登錄的Telnet命令+傳輸協議FTP命令

一、23端口登錄的Telnet命令 Telnet是傳輸控制協議/互聯網協議&#xff08;TCP/IP&#xff09;網絡&#xff08;如Internet&#xff09;的登錄和仿真程序&#xff0c;主要用于Internet會話。基本功能是允許用戶登錄進入遠程主機程序。 常用的Telnet命令 Telnet命令的格式為&…

有人吐槽:可視化大屏面向領導的設計,真相是這樣嗎?

某些老鐵的態度很極端&#xff0c;看到可視化大屏頁面就一口斷定&#xff0c;除了討好領導之外&#xff0c;屁用沒有。真相是這樣嗎&#xff1f;貝格前端工場嘗試給老鐵們分析下。 一、可視化大屏確實要面向領導&#xff0c;但不是討好領導 可視化大屏的設計需要考慮領導和管理…

整理的一些腦模板及節點的名稱

整理的一些腦模板及節點的名稱 前言模板簡介AAL90模板HOA112 模板 前言 自己看論文找的&#xff0c;因為有些數據集網站的確有點難找到模板的名稱等等。所以主要是看一些論文&#xff0c;因為有文獻&#xff0c;所以更有保障一些。當然也有一些在數據網站上比較容易找到所以一…