当前位置: 首页 > news >正文

c++基础28函数的类型

函数的类型

  • 基本用法
  • 例子
    • using
    • fucntion

基本用法

在C++中,函数类型是指函数的签名,包括返回类型、参数类型以及参数的数量。函数类型可以用来声明函数指针、函数引用或者作为模板参数。

  • 函数也可当成一种数据类型
  1. 函数指针
    函数指针可以指向一个函数,其类型由返回类型、参数列表和const修饰符(如果有)决定。例如:

    • funcPtr指向函数myFunction
    int myFunction(int, double) 
    int (*funcPtr)(int, double) = myFunction; // 指向返回int,接受int和double参数的函数
    
    • using别名声明(Type Alias)
      using可以用来为类型创建别名,使得类型名称更短或更易于理解。这对于模板类型特别有用。
    using MyInt = int; // 将MyInt作为int的别名
    using Vec = std::vector<int>; // 将Vec作为std::vector<int>的别名
    
  2. 函数引用
    函数引用必须被初始化为一个具体的函数,并且不能被重新赋值。函数引用的类型与它所引用的函数的类型相同。例如:

    void (&funcRef)(int) = myFunction; // 引用返回void,接受int参数的函数
    
  3. 函数作为参数
    可以将函数作为参数传递给另一个函数,此时需要指定函数的类型。例如:

    void callFunction(void (*func)(int)) {func(10);
    }
    
  4. std::function
    C++11引入了std::function,这是一个可以存储、调用和复制任何可调用对象(函数、lambda表达式、函数对象等)的类模板。例如:

#include <functional>
#include <iostream>void greet() {std::cout << "Hello, World!" << std::endl;
}int main() {std::function<void()> func = greet;func(); // 输出 "Hello, World!"
}

例子

using

#include<iostream>
using namespace std;
double ma(double a,double b){return a+b; 
}
int main(void){double(* f)(double,double)=ma;double(*f1[])(double,double){ma,ma};cout<<f(1,3)<<endl;cout<<f1[0](5,5)<<endl;cout<<"********"<<endl;//使用using别名 using m_type=double(*)(double,double);m_type fun = ma;m_type fun1[]{ma,ma};cout<<fun(5,4)<<endl;cout<<fun1[1](100,50)<<endl;
}

fucntion

#include <functional>
#include <iostream>
// 一个简单的函数
int add(int a, int b) {return a + b;
}
int main() {// 使用函数function,需用头文件 <functional>std::function<int(int, int)> func = add;std::cout << "10 + 5 = " << func(10, 5) << std::endl;return 0;
}

相关文章:

c++基础28函数的类型

函数的类型 基本用法例子usingfucntion 基本用法 在C中&#xff0c;函数类型是指函数的签名&#xff0c;包括返回类型、参数类型以及参数的数量。函数类型可以用来声明函数指针、函数引用或者作为模板参数。 函数也可当成一种数据类型 函数指针&#xff1a; 函数指针可以指向…...

Elasticsearch(四):query_string查询介绍

query_string查询介绍 1 概述2 基本概念3 数据准备4 query_string查询示例4.1 基本查询4.2 复杂查询解析4.3 高级过滤解析4.4 模糊查询解析4.5 高亮查询解析4.6 分页查询解析 5 总结 大家好&#xff0c;我是欧阳方超&#xff0c;可以我的公众号“欧阳方超”&#xff0c;后续内容…...

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习&#xff0c;处处可用。 一切皆数据 Nu 管道使用结构化数据&#xff0c;你可以用同样的方式安全地选择&#xff0c;过滤和排序。停止解析字符串&#xff0c;开始解决问题。 强大的插件系统 具备强…...

Vue禁止打开控制台/前端禁止打开控制台方法/禁用F12/禁用右键

代码片段展示了如何在前端页面中禁用右键菜单、禁止文本选择、阻止特定键盘操作&#xff08;如F12键打开开发者工具&#xff09;&#xff0c;以及通过检测窗口尺寸变化来尝试阻止用户调试页面。 // 鼠标禁止右键禁止打开控制台及键盘禁用forbidden(){// 1.禁用右键菜单document…...

volatile关键字

1. 可见性 当一个变量被声明为 volatile 时&#xff0c;任何线程对该变量的写入操作都会立即对其他线程可见。这意味着&#xff1a; 当一个线程修改了 volatile 变量的值&#xff0c;其他线程在读取这个变量时会看到最新的值&#xff0c;而不是可能被缓存的旧值。 这解决了多线…...

[Linux] 共享内存

在Linux中&#xff0c;共享内存是一种允许不同进程之间直接交换数据的高效机制。它是IPC&#xff08;Inter-Process Communication&#xff0c;进程间通信&#xff09;的一种方式&#xff0c;允许多个进程通过映射同一块物理内存区域来实现数据共享&#xff0c;而无需使用内核来…...

网络的基础

学习地点&#xff08;泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 (bilibili.com)&#xff09; HTTP协议介绍 HTTP&#xff0c;全称为超文本传输协议&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;是用于万维网服务器向本地浏览器传输超文本&#xff…...

金融学期末速成笔记

【拯救者】金融学速成&#xff08;基础习题&#xff09; 重点: 市场经济是发达的商品经济。在市场经济条件下&#xff0c;市场机制作为资源配置方式&#xff0c;发挥基础性作用。 除具有商品经济的一般特征外&#xff0c;与商品经济相比&#xff0c;市场经济还具有一些新的特征…...

【Elasticsearch入门到落地】1、初识Elasticsearch

一、什么是Elasticsearch Elasticsearch&#xff08;简称ES&#xff09;是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写&#xff0c;基于Apache Lucene来构建索引和提供搜索功能&#xff0c;是一个分布式、可扩展、近实…...

电子版产品册代替纸质版产品册,开源节流!

​在当今数字化时代&#xff0c;企业纷纷寻求创新手段以降低成本、提高效率。纸质版产品册作为传统宣传手段&#xff0c;虽然具有一定的宣传效果&#xff0c;但成本高昂、更新不便、环保压力等问题日益凸显。本文将为您详细解析如何通过采用电子版产品册替代纸质版产品册&#…...

npm i忽略依赖冲突

在使用npm安装依赖时&#xff0c;如果遇到依赖冲突&#xff0c;通常npm会提示错误并阻止安装。但是&#xff0c;如果你想要忽略这些依赖冲突&#xff0c;可以使用以下几种方法&#xff1a; 1.使用--force或-f参数&#xff1a;这个参数会强制npm忽略某些错误&#xff0c;包括依…...

商品,订单业务流程梳理一

业务架构梳理 业务系统介绍 业务商品流程 业务订单流程 业务售后流程 系统架构 技术栈...

Spring中的 bean 标签中的 factory-bean , factory-method

1.首先说说 factory-method 是指定创造实例的工厂方法&#xff0c;用法&#xff1a; factory-method 和 class 配合使用&#xff0c;这时 factory-method 必须是class所指定的类中的一个静态方法&#xff0c;也就是Spring会直接调用 class 所指定的类的静态工厂方法创建一个实例…...

车间管理|基于SprinBoot+vue工厂车间管理系统设计与实现(源码+数据库+文档)

车间管理系统系统 目录 基于SprinBootvue工厂车间管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…...

C#实战:使用腾讯云识别服务轻松提取火车票信息

目录 一、腾讯票据单据识别 Invoice OCR服务介绍 二、开发完整流程 2.1 开通文字识别服务 2.2 创建开发者密钥 2.3 创建项目编写代码集成 三、总结 公司内部涉及到车票报销的时候一个个输入火车票信息非常麻烦&#xff0c;尤其是出差比较多的企业&#xff0c;这对于财务人…...

王珊数据库系统概论第六版PDF+第五版课后答案+课件

为了保持科学性、先进性和实用性&#xff0c; 编者在第5版教材基础上对全书内容进行了修改、更新和充实。在科学性方面&#xff0c; 编者在系统篇中增加了第9章关系数据库存储管理&#xff0c; 讲解数据库的逻辑与物理组织方式及索引结构。增加这部分内容有助于学生更好地理解关…...

Spring学习笔记(四)

二十一、Spring事务详解 &#xff08;一&#xff09;、Spring基于XML的事务配置 1.环境搭建 1.1 构建maven工程&#xff0c;添加相关技术依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context…...

CALL处 F8的“bug“

看zpchcbd师傅的一篇文章看到了这个比较有趣的点。实操跟着过一遍。 准确来说这个不能说是"bug"&#xff0c;这可以是一种"刻意为之"的手段&#xff0c;可以用于加壳、反调试等逆向技术中。 原理&#xff1a; F8步过call的时候&#xff0c;其实是在call的…...

Verilog中的有符号数与无符号数

1. 有符号与无符号最本质的区别在于高位扩展时的扩展规则不同&#xff1b; 对于同一个4‘b1001进行位扩展成8位&#xff1a; 有符号扩展结果为&#xff1a;8’b11111001 无符合扩展结果为: 8b00001001 2. 同第一点&#xff0c;若在运算中没有涉及位扩展&#xff0c;则有符…...

15分钟学 Go 第 47 天 :并发进阶——深入了解Go语言的并发模型!

第47天的学习&#xff1a;并发进阶——深入了解Go语言的并发模型&#xff01; 目录 Go并发模型简介Goroutines深度讲解Channels的进阶使用Select语句详解并发模型设计模式实战案例分析常见问题与解决方案 1. Go并发模型简介 Go语言以其内置的并发支持而闻名。通过轻量级的g…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...