首页 > 编程语言 >C++ 函数模版 不定参数

C++ 函数模版 不定参数

时间:2023-08-22 14:27:02浏览次数:40  
标签:const 定义 模版 函数 C++ static sum 变量 不定

实现参数不固定的加法,需要如下实现


template<typename T>  
T tempSum(const T& t)
{
	static T sum;
	sum += t;
	return sum;
}
//这里保存计算结果
template<typename T>  
T saveValue(const T& t)
{
	static T temp = t; //这里必须用static的功能
	return temp;
}
 
void temAdd() {}   //递归结束条件
template<typename T,typename... U>
T temAdd(const T& first, const U&... args)
{
	T result = tempSum(first);   //思考为什么用另外的函数计算,而不是定义static变量在次数计算
	temAdd(args...);             //递归,(这也是为什么要把结果保存在另一个函数的原因)
	return saveValue(result);	 //思考这里为什么要用一个函数保存结果
}
 
int main()
{
	//cout << temAdd("a", "bc", "ed") << endl; //错误 char *不能用+运算符进行运算
	cout << temAdd(string("a"),string("bc"),string("ed")) << endl;
	cout << temAdd(1,3,5,7,9) << endl;
 
	return 0;
}

上面问题的答复:

saveValue 这个函数里面有对一个static 变量进行定义,但是对静态变量的定义只能定义一次,之后其实是没有生效的。因为静态变量的定义其实是编译时期,而不是运行时期,否则运行时候的链接会出错。那么那个变量的初次定义其实就是最终的答案。

标签:const,定义,模版,函数,C++,static,sum,变量,不定
From: https://www.cnblogs.com/wsl-hitsz/p/17648377.html

相关文章

  • 多态性 - C++中实现运行时多态的方式
    一、概述C++中的多态性是指同一个函数可以有多种不同的实现方式,并且在运行时根据实际情况进行选择执行。在C++中实现多态有两种方式:静态多态和动态多态。静态多态是指在编译时确定函数的实现,包括函数重载和模板函数;动态多态是指在运行时根据对象的实际类型来确定函数的实现,包括虚......
  • paddleocr在华为升腾920上编译C++ cpu版的推理
    最好用这个提供的docker环境华为昇腾NPU-PaddlePaddle深度学习平台编译推理库飞腾/鲲鹏下从源码编译—Paddle-Inferencedocumentation(paddlepaddle.org.cn)编译成功后还需要报错 Noruletomaketarget'/root/workspace/Paddle/build/paddle_inference_install_dir......
  • 4.8 C++ Boost 应用JSON解析库
    property_tree是Boost库中的一个头文件库,用于处理和解析基于XML、Json或者INFO格式的数据。property_tree可以提供一个轻量级的、灵活的、基于二叉数的通用容器,可以处理包括简单值(如int、float)和复杂数据结构(如结构体和嵌套容器)在内的各种数据类型。它可以解析数据文件到......
  • 4.9 C++ Boost 命令行解析库
    命令行解析库是一种用于简化处理命令行参数的工具,它可以帮助开发者更方便地解析命令行参数并提供适当的帮助信息。C++语言中,常用的命令行解析库有许多,通过本文的学习,读者可以了解不同的命令行解析库和它们在C++项目中的应用,从而更加灵活和高效地处理命令行参数。一般比较常见的解......
  • 4.8 C++ Boost 应用JSON解析库
    property_tree是Boost库中的一个头文件库,用于处理和解析基于XML、Json或者INFO格式的数据。property_tree可以提供一个轻量级的、灵活的、基于二叉数的通用容器,可以处理包括简单值(如int、float)和复杂数据结构(如结构体和嵌套容器)在内的各种数据类型。它可以解析数据文件......
  • 4.9 C++ Boost 命令行解析库
    命令行解析库是一种用于简化处理命令行参数的工具,它可以帮助开发者更方便地解析命令行参数并提供适当的帮助信息。C++语言中,常用的命令行解析库有许多,通过本文的学习,读者可以了解不同的命令行解析库和它们在C++项目中的应用,从而更加灵活和高效地处理命令行参数。一般比较常见的解......
  • C++简介
    一、C++介绍本贾尼.斯特劳斯特卢普,于1979年在贝尔实验室负责分析UNIX系统内核流量的分布情况时,特别希望有一种更加模块化的工具,于1979.10开始着手研发一款新的编程语言,在C语言的基础上增加了面向对象的机制,也就是C++,1983年完成了C++的第一个版本C++与C的关联和重要区别:(面试题)......
  • 标准C++ -- day01
    一、C++介绍本贾尼.斯特劳斯特卢普,于1979年在贝尔实验室负责分析UNIX系统内核流量的分布情况时,特别希望有一种更加模块化的工具,于1979.10开始着手研发一款新的编程语言,在C语言的基础上增加了面向对象的机制,也就是C++,1983年完成了C++的第一个版本C++与C的关联和重要区别:(面试题)......
  • C++的对象与类的含义
    C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。C++中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如:#include<s......
  • C++遍历TypeList(可变模板参数)的简单办法
        这里例举了两种方案,一种是基于C++17的constexpr,实现起来更精简。另外一种使用传统的方式,C++11就可以用了。    另外C++11的方案也是一种计算不定参数模板参数个数的方法。#include<iostream>#include<string>//inC++17#if((defined(_MSVC_LANG)......