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.mzph.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;所以更有保障一些。当然也有一些在数据网站上比较容易找到所以一…