c++ [[nodiscard]] 使用

news/2025/1/15 14:08:29/

[[nodiscard]]  为我们提供了一种去除无意间写出无用代码的方法;

使用示例如下:

#include <string>
#include <iostream>class ToolExample
{public:enum class ProcessResultState{Success = 0,Failure = 1};ProcessResultState processXX(){//process thingsreturn ProcessResultState::Success;}[[nodiscard]] std::string getName(){ return "Snoopy"; }};int main()
{std::cout << "nodiscard example" <<  std::endl;ToolExample tool_example;tool_example.processXX();tool_example.getName();}编译输出:
main.cpp: In function 'int main()':
main.cpp:35:23: warning: ignoring return value of 'std::string ToolExample::getName()', declared with attribute 'nodiscard' [-Wunused-result]35 | tool_example.getName();|                       ^
main.cpp:21:35: note: declared here21 |         [[nodiscard]] std::string getName()|         执行结果:
nodiscard example

从示例中我们可以看出[[nodiscard]]用于修饰有返回值且在调用(或类别中的方法,这里统一使用函数来代表方法,函数,过程等)之后如果不接收返回值则函数调用失去意义的(除了占用CPU资源没有别的用处)的函数。nodiscard在这里的意义就是减少无用的调用。

对procesXX()调用来说,返回值可以接收也可以不接收,processXX()实现的是一个过程,这时不用[[nodiscard]]是必要的;

对getName()来说,他存在的唯一价值就是返回一个需要另一变量(或编译器生成的临时变量)来接收的返回值,这里如果省略[[nodiscard]]可能会导致无用的调用(一般是手误造成的)。

总结一下:

1. 对于只提供返回值的函数建议添加[[nodiscard]]修饰;

2. 对于可接收也可不接收返回值的函数一定要省略[[nodiscard]],否则要使用std::ignore或是void来忽略,这也是麻烦的。


http://www.ppmy.cn/news/983759.html

相关文章

智慧工厂4G+蓝牙+UWB+RTK人员定位系统解决方案

人员定位在智慧工厂的应用正逐渐受到重视&#xff0c;通过使用现代化的技术和智能终端设备&#xff0c;工厂管理者能够实时定位和跟踪员工的位置&#xff0c;方便进行人员调度管理和监督人员的工作情况&#xff1b;人员遇到紧急情况&#xff0c;可通过定位设备一键报警求救&…

Android中保持屏幕常亮的三种使用方法

目录 一、设置Flag 二、使用View类中的属性方法 1、Xml布局中设置&#xff1a; 2、功能代码中设置&#xff1a; 三、Wakelock 锁定机制 1、简介 2、作用 3、分类标志 4、使用方法 &#xff08;1&#xff09;在AndroidManifest.xml中设置权限 &#xff08;2&#xff0…

陕西省工程师职称评审条件

专业建工类&#xff1a;工民建工程师、建筑工程师、建筑设计工程师、建筑装饰工程师、建筑施工工程师、建筑管理工程师、建筑水电安装工程师、工民建安装工程师、给排水工程师、土木工程工程师、土木建筑工程师、造价工程师、测量工程师、结构工程师、暖通工程师、安全工程师、…

常见内网穿透工具,收好了!

前言 本文以渗透的视角&#xff0c;总结几种个人常用的内网穿透&#xff0c;内网代理工具&#xff0c;介绍其简单原理和使用方法。 1. nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协…

Ubuntu 安装 MinIO

MinIO是一个开源的高性能对象存储解决方案&#xff0c;支持多种安装方式&#xff0c;本例仅介绍最基础的单机安装方式。 一&#xff1a;下载安装文件 直接从MinIO官网下载安装文件。 1.1 下载服务端 wget https://dl.min.io/server/minio/release/linux-amd64/minio 1.2 将…

【电压和电压稳定指数研究】带多台配电发电机 (DG) 的径向配电系统研究【IEEE33节点】(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 电压和电压稳定指数研究是关于电力系统中电压水平和其稳定性的研究。电力系统中的电压是指电网中的电压水平&#xff0c;通常以相电压&#xf…

Spring(10) 生成和替换Banner启动图案

目录 1.背景2.推荐网站3.如何集成到spring项目中4.效果展示 1.背景 我们在启动 Spring 项目的时候经常会看到一个 Spring 字样的启动图案。如下所示&#xff1a; 如果我们也想根据我们的内容生成这样的图案&#xff0c;应该怎么操作呢&#xff1f; 2.推荐网站 可以生成这种图…

【Vue3】computed 计算属性

computed 基础语法 <template><div><div>性&#xff1a;<input v-model"firstName" type"text"></div><div>名&#xff1a;<input v-model"lastName" type"text"></div><div>…