C++:弃值表达式

正文

有时候需要利用某些表达式的副作用来实现某些目的:

#include <iostream>
template <typename... Args>
void print(const Args &...args) {Arr{0,(std::cout << args<< ' ',0)...};
}
int main() {print("hello", 1, 2, 3, 4, 5, 6);print();return 0;
}

但这会产生警告:

multi2.cxx:7:5: warning: expression result unused [-Wunused-value]Arr{0,(std::cout << args<< ' ',0)...};^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
multi2.cxx:10:5: note: in instantiation of function template specialization 'print<char [6], int, int, int, int, int, int>' requested hereprint("hello", 1, 2, 3, 4, 5, 6);^
multi2.cxx:7:5: warning: expression result unused [-Wunused-value]Arr{0,(std::cout << args<< ' ',0)...};^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
multi2.cxx:11:5: note: in instantiation of function template specialization 'print<>' requested hereprint();^
2 warnings generated.

为了消除警告,可以用关键字 void明确表示这是一个弃值表达式,即:

#include <iostream>
template <typename... Args>
void print(const Args &...args) {using Arr = int[];(void)Arr{0,(std::cout << args<< ' ',0)...};
}
int main() {print("hello", 1, 2, 3, 4, 5, 6);print();return 0;
}

关于 void 表明弃值表达式的使用,实际上并非 void 本身表示弃值表达式,而是在某些上下文中使用 void 来表明该表达式的返回值被丢弃。例如,在函数声明中,如果函数的返回类型是 void,那么调用该函数就意味着对返回值的忽略,从而可以被视为一种弃值操作。

比如:

#include <iostream>
int getValue() {std::cout << "Getting value..." << std::endl;return 42;
}int main() {(void)getValue();// 使用弃值表达式,利用副作用int x = 10;(void)((x > 5) ? (std::cout << "hello1\n", 0): (std::cout << "hello2\n", 0));return 0;
}

上面的 getValue()确实有一个返回值,但是我们调用它的时候并不需要这个返回值,因此可以用关键字 void 表明我们放弃了这个值,并告诉编译器不要产生警告。另外,根据条件 x > 5 的结果,选择输出 “hello1” 还是 “hello2”。无论选择哪个分支,最终都返回 0,这个返回值在这里被忽略,只关注分支执行时的副作用(输出文本)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.03.31 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、自动驾驶一周资讯 -小米SU7上市24小时&#xff0c;大定达88898台&#xff1b;小鹏汽车正式进入德国市场&#xff1b;地平线递交港股上市申请 自动驾驶一周资讯 -小米SU7上市24小时&…

ping命令返回无法访问目标主机和请求超时浅析

在日常经常用ping命令测试网络是否通信正常&#xff0c;使用ping命令时也经常会遇到这两种情况&#xff0c;那么表示网络出现了问题。 1、请求超时的原因 可以看到“请求超时”没有收到任何回复。要知道&#xff0c;IP数据报是有生存时间的&#xff0c;当其生存时间为零时就会…

goproxy一键安装脚本(稳定易用的proxy软件)

goproxy 官网 https://goproxy.cn/ go语言开发的简单易用高性能proxy 软件 #!/bin/bash # time: 2021-05-11 17:47:39 # by: Chen ##执行脚本需要传入网络设备名 ##例&#xff1a;sh goproxy-install.sh eth0# 0.安装必须要的依赖 yum install wget -y || apt install wget -y…

Objective-C学习笔记(NSDictionary,NSFileManager,Copy)4.11

1.NSDictionary:以键值对key-value存储元素。 遍历字典&#xff1a;for(id item in *dict){ NSLog ( "% %",item,dict[item] ); } 还可以用block 2.NSFileManager&#xff1a;操作磁盘得文件&#xff0c;创建删除复制拷贝移动。 3.CZPoint&#xff1a;ios界面的x…

vue简单使用二(循环)

目录 属性绑定 if判断&#xff1a; for循环&#xff1a; 属性绑定 代码的形式来说明 三元表达式的写法&#xff1a; if判断&#xff1a; for循环&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"…

ActiveMQ + MQTT 集群搭建(虚机版本) + Springboot使用配置

文章目录 前言一、ActiveMQ、 MQTT是什么&#xff1f;1.ActiveMQ介绍2.MQTT介绍 二、集群搭建步骤1.下载apache-activemq-5.15.12-bin.tar.gz2.上传apache-activemq-5.15.12-bin.tar.gz到服务器并解压文件到文件夹clusters、master、slave三个文件夹下面形成三个节点&#xff0…

Win10下安装Anaconda

Anaconda是可以便捷获取包且对包能够进行管理&#xff0c;同时对环境可以统一管理的发行版本&#xff0c;它包含了conda、Python在内的超过180个科学包及其依赖项。 安装Anaconda Anaconda官方下载网址&#xff1a;https://www.anaconda.com/download 官网页面中&#xff0c…

Docker日志查看神器

探索Dozzle&#xff1a;简单实用的Docker日志查看工具 在容器化应用程序的开发和部署中&#xff0c;日志管理是至关重要的一环。为了便于查看和监控Docker容器的日志信息&#xff0c;开发人员和运维团队需要便捷的工具。Dozzle 就是这样一款简单实用的Docker日志查看工具&…

2024 Mathorcup高校数学建模挑战赛(A题)| PCI冲突问题 | 建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍团队独辟蹊径&#xff0c;以整数规划&#xff0c;多元回归等强大工具&#xff0c;构建了解决复杂问题的独特方案。深度学习, 混沌模型的妙用&#xff0c;为降低非法野生动物贸易提供新视角。通过综合分析&#xff0c;描绘出概率、…

AUTOSAR ARXML处理 - C#的解析代码(二)

4.2.4 配置模版&#xff1a;参数类 参数容器&#xff08;ECUCPARAMCONFCONTAINERDEF&#xff09;的PARAMETERS集合类由以下参数类实例构成。 4.2.4.1 配置模版&#xff1a;枚举参数&#xff08;ECUCENUMERATIONPARAMDEF &#xff09; 配置一个下拉选项&#xff0c;如PORT中一…

OpenSSH升级(linux 6)

一说明 本文档为Linux6.x Openssh升级至8.4文档。 二 使用打包好的Openssh rpm包进行升级 2.1 安装telnet服务 升级Openssh服务之前&#xff0c;确保telnet可以登录系统。 安装步骤如下&#xff1a; rpm -ivh xinetd-2.3.14-29.el6.x86_64.rpm rpm -ivh telnet-0.17-46.el6.x86…

基于springboot实现知识管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现知识管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应师生作业交流形式的网站。本文介绍了知识管理系统的开发全过程。通过分析企业对于知识管理系统的需求&#xff0c;创建了…

日出6万单!美区“开塞露”卖疯了,保健赛道正式起飞!

质疑养生&#xff0c;理解养生&#xff0c;加入养生&#xff01; 从保温杯里泡枸杞&#xff0c;到桌上摆满保健品&#xff0c;"养生"已经从一种模糊的概念转变为了生活中的刚需。在加班、熬夜、脱发这些"亚健康"标签的围绕下&#xff0c;年轻人开始重视自…

keepalived配置文件详细分析

目录 一、主配置文件 二、配置文件分析 三、副节点配置 四、概念讲解 五、当Master服务器发生故障时&#xff0c;Keepalived会如何处理&#xff1f; 六、当Master服务器故障时&#xff0c;Backup服务器如何判断故障发生&#xff1f; 七、Backup服务器如何监听Master服务器…

k8s基础入门

前言 开始学习K8S了&#xff0c;下面就是笔记整理 简介 k8s是谷歌开源得容器管理系统&#xff0c;主要功能包括 基于容器得应用部署&#xff0c;维护和滚动升级负载均衡和服务发现跨机器和跨地区得集群调度自动伸缩无状态服务和有状态服务广泛得Volume支持插件保持扩展性 …

蓝旭前端05:JavaScript进阶

蓝旭前端05&#xff1a;JavaScript进阶 文章目录 蓝旭前端05&#xff1a;JavaScript进阶基础简单复习数据类型变量运算符控制语句JavaScript引入JavaScript输出JavaScript注释JavaScript弹窗 Overview获取元素通过ID获取元素通过类名获取元素通过标签名获取元素通过选择器获取元…

ELFK的部署

目录 一、ELFK&#xff08;FilebeatELK&#xff09; 1. Filebeat的作用 2. ELFK工作流程 3. ELFK的部署 3.1 服务器配置 3.2 服务器环境 3.3 安装filebeat 3.4 修改filebeat主配置文件 3.5 在logstash组件所在节点&#xff08;apache节点&#xff09;上新建一个logstas…

Redis部署之哨兵

背景 在上篇中Redis部署之主从已完成redis主从部署&#xff0c;系统的性能提高了&#xff0c;但如果主节点发送故障&#xff0c;则无法对外提供写入服务&#xff0c;需要手动进行主从切换。 引入哨兵可提升系统可用性&#xff0c;并在主节点故障时自动完成主从切换。 环境说…

如何管好地铁站见新质生产力 | 图扑数字孪生

智慧车站建设是现代交通领域的重要发展方向&#xff0c;旨在通过集成先进的信息技术&#xff0c;提升车站的运营效率、安全性及乘客体验。基于既有的综合监控技术&#xff0c;通过集成多种传感器和数据采集设备&#xff0c;实现对车站设备、环境、客流、人员等对象群的智能感知…

这样画箱线图,为你的SCI论文增色!

高级箱线图的绘制 下面的箱线图比较美观&#xff0c;非常适合数据量不大、且分布明显的时候使用。 在论文撰写中&#xff0c;图表的清晰和吸引人的展示方式是至关重要的。箱线图&#xff08;Whisker Plot&#xff09;是一种展示数据分布的经典工具&#xff0c;它不仅可以清楚地…