闲来无事,论茴香豆的茴有几种写法

一、引言

以下是几行浅薄而简洁的代码,聊聊add函数有哪几种写法。抛砖引玉,也许在你实际的项目中会带来些许的收益。

二、知识点

知识点比较简单: 左值和右值引用,std::move 的移动语义,模版等

三、代码(* 自己看自己品,注意有雷)

#include <iostream>
#include <string>
#include <tuple>
#include <vector>
#include <QDebug>#include <iostream>
#define MYTRACE()  do{ qDebug() << __FUNCTION__ << __LINE__;}while(0);class Example {
public:template<typename T>static bool willOverflow(T a, T b) {qDebug() << "T number :" << std::numeric_limits<T>::max();bool ok =     (a > 0 && b > std::numeric_limits<T>::max() - a)|| (a < 0 && b < std::numeric_limits<T>::min() - a);if(ok)  throw std::overflow_error("Overflow detected");return ok;}auto add(int x,int y) &{MYTRACE();try {willOverflow(x, y);} catch (const std::exception& e) {qDebug() << e.what();}return x+y;}auto add(int x, int y) && -> int{MYTRACE();try {willOverflow(x, y);} catch (const std::exception& e) {qDebug() << e.what();}return x + y;}template<typename T>T add(T val){return val;}template<typename T,typename... Args>auto add(T first,Args... args){return first + add(args...);}template<typename T>auto add(std::initializer_list<T> l) {MYTRACE();static_assert(std::is_same<T,double>::value || std::is_integral<T>::value,"must be double or int.");return  std::accumulate(l.begin(),l.end(),0);}
};int main() {Example example;std::cout << example.add(10,10) << std::endl;std::cout << example.add<int>({5,10,15}) << std::endl;int sum1 = example.add<int>(1, 2, 3, 4, 5);double sum2 = example.add<double>(1.1, 2.2, 3.3, 4.4, 5.5);std::cout << "Sum of integers: " << sum1 << std::endl;std::cout << "Sum of doubles: " << sum2 << std::endl;// Call add() on an rvalue objectint result = Example().add(5, 10);std::cout << "Result: " << result << std::endl;std::cout << std::move(example).add(5,10) << std::endl;return 0;
}

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

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

相关文章

Java实现数据结构——双链表

目录 一、前言 二、实现 2.1 类的创建 三、对链表操作实现 3.1 打印链表 3.2 插入数据 3.2.1 申请新节点 3.2.2 头插 ​编辑 3.2.3 尾插 3.2.4 链表长度 3.2.5 任意位置插入 3.3 删除数据 3.3.1 头删 3.3.2 尾删 3.3.3 删除指定位置数据 3.3.4 删除指定数据 3…

C++ PImpl模式、指向实现的指针、PImpl Idiom、隐藏实现细节

C PImpl模式、指向实现的指针、PImpl Idiom、隐藏实现细节 flyfish PImpl 全称是 “Pointer to Implementation”&#xff0c;在中文中通常翻译为“指向实现的指针”或者“指向实现”。PImpl 是一种编程技巧&#xff0c;通常用于 C 中&#xff0c;通过这种技术&#xff0c;可…

涉案财物管理系统|八大模块可视化展示

涉案财物管理系统DW-S405系统基于物联网技术规范涉案财物管理流程&#xff0c;确保涉案财物的安全性、完整性和合法性&#xff1b;可以提高办案效率&#xff0c;减少办案成本&#xff0c;实现资源共享。 涉案财物管理系统DW-S405主要分为 8 大模块数据展示。 1、案件信息&…

Linux C | 管道open打开方式

Linux C | 管道open打开方式 1.参考 1. 管道 2.现象 是的&#xff0c;这段代码在调用 open(AUDIOIN_FIFO, O_RDONLY) 时可能会被阻塞。原因是 FIFO&#xff08;命名管道&#xff09;在以只读模式打开时&#xff0c;如果没有其他进程以写模式打开该 FIFO&#xff0c;open 调用将…

防火墙综合实验二

目录 实验要求 IP地址配置 需求七 需求八 需求九 需求十 需求十一 实验要求 接防火墙综合实验一&#xff01; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换)。 8&#xff0c;分公司设备可以通过…

美无定论,娜扎亦菲各自绽放你更爱哪一款?

娜扎亦菲各自绽放你更爱哪一款&#xff1f; 哎呀&#xff0c;这个问题可真是让我头疼呢&#xff0c; 就像让我在两个糖果店里选择最甜的那一颗一样难&#xff01; 古力娜扎和刘亦菲&#xff0c;两位都是娱乐圈里璀璨的明珠&#xff0c; 美得各有千秋&#xff0c;让人怎么舍得…

python爬虫js逆向入门

js基础 在 JavaScript 逆向工程中&#xff0c;常常会遇到一些复杂的代码结构&#xff0c;这些代码可能包含各种函数定义、对象操作、异步调用等。 ### 1. 函数声明和调用function generateSignature(uri, params) { // 将 uri 和参数对象转换为字符串 var data uri ? Objec…

C++基础入门(上)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 C基础入门(上) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. C发展历史 2. C版本…

如何在SpringCloud项目中实现断路器模式?

在Spring Cloud项目中实现断路器&#xff08;Circuit Breaker&#xff09;模式可以通过几种不同的库实现&#xff0c;如Netflix Hystrix、Resilience4j或Spring Cloud Circuit Breaker。断路器模式允许您的应用在遇到服务故障时快速失败&#xff0c;防止故障的蔓延和系统过载&a…

ffmpeg 找到编解码器,和编解码器上下文后,是如何初始化具体的编解码器的?aac 初始化流程大致如下

1.当使用 avcodec_find_encoder_by_name找到编码器的时候&#xff0c; const AVCodec * aacencoder avcodec_find_encoder_by_name("libx264"); 编码器 有值的是&#xff1a; id AV_CODEC_ID_H264 (27) long_name libx264 H.264…

read paper and make summer (Image enhancement)

read paper and make summer ==标题==:图像==标题==:低级视觉方法==标题==:颜色直方图==标题==:颜色空间变换==标题==:亮度通道==标题==:色度通道==标题==:图像滤波==标题==:方盒滤波==标题==:均值滤波==标题==:高斯滤波(去噪)==标题==:中值滤波(去噪)==标题==:…

Goland 通道

channel通道 目录 channel通道 channel介绍 channel基本使用 有缓存通道和无缓存通道的区别 通道的初始化&#xff0c;写入数据到通道&#xff0c;从通道读取数据及基本的注意事项 channel的关闭和遍历 channel的关闭 为什么关闭 如何优雅地关闭通道 channel的遍历 chan…

小众好玩的赛车游戏:环道巨星 CIRCUIT SUPERSTARS中文安装包

《环道巨星》&#xff08;Circuit Superstars&#xff09;是一款由赛车迷亲手为其他赛车迷打造的俯视角赛车游戏。荟集史上各类赛车运动&#xff0c;旨在提供刺激好玩的驾驶体验&#xff1b;而游戏自带的高技术难度将促使玩家长时间磨砺技巧&#xff0c;以达成完美的一圈。 游戏…

刷题Day50|739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II

开启单调栈篇章&#xff1a;单调栈用来找任意一个元素左边或者右边第一个比它大/小的元素&#xff08;或位置&#xff09;。 739. 每日温度 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;使用一个递增单调栈&#xff0c;可以从头到尾或者从尾到头…

js中scrollIntoView第一次不生效,第二次生效

scrollIntoView 方法用于将元素滚动到可视区域。如果在页面加载后立即使用&#xff0c;可能不会生效&#xff0c;因为页面可能还没有完全渲染或者加载完成。 如果是因为元素还没有完全渲染完成&#xff0c;可以在 requestAnimationFrame 中调用 scrollIntoView。 requestAnima…

C# 建造者模式(Builder Pattern)

建造者模式&#xff08;Builder Pattern&#xff09;&#xff0c;也被称为生成器模式&#xff0c;是一种对象构建模式&#xff0c;旨在将复杂对象的构建过程与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。这种模式特别适用于构建具有多个组成部分的复杂对象&am…

2024前端面试真题【CSS篇】

盒子模型 盒子模型&#xff1a;box-sizing&#xff0c;描述了文档中的元素如何生成矩形盒子&#xff0c;并通过这些盒子的布局来组织和设计网页。包含content、padding、margin、border四个部分。 分类 W3C盒子模型&#xff08;content-box&#xff09;&#xff1a;标准盒子模…

【系统架构设计师】九、软件工程(面向对象方法|逆向工程)

目录 六、面向对象方法 6.1 基本概念 6.2 面向对象的分析 6.2.1 用例关系 6.2.2 类之间的关系 6.3 面向对象的设计 6.4 面向对象设计原则与设计模式 6.5 面向对象软件的测试 七、逆向工程 历年真题练习 六、面向对象方法 面向对象的分析方法 (Object-Oriented Analys…

python输出/sys/class/power_supply/BAT0/电池各项内容

读取 /sys/class/power_supply/BAT0/ 目录下的所有相关文件,并输出其内容: import os# 定义电池信息文件的路径 battery_path = "/sys/class/power_supply/BAT0/"# 读取文件内容的函数 def read_battery_info(file_name):try:with open(os.path.join(battery_path…

Mybatis-Plus中LambdaQueryWrapper

基本用法 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; // 假设有一个 User 实体类 LambdaQueryWrapper<User> queryWrapper new LambdaQueryWrapper<>(); // 添加查询条件 queryWrapper.eq(User::getName, "John&quo…