c++基础28函数的类型

函数的类型

基本用法

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

  • 函数也可当成一种数据类型
  1. 函数指针

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

    • funcPtr指向函数myFunction
    cpp 复制代码
    int myFunction(int, double) 
    int (*funcPtr)(int, double) = myFunction; // 指向返回int,接受int和double参数的函数
    • using别名声明(Type Alias)
      using可以用来为类型创建别名,使得类型名称更短或更易于理解。这对于模板类型特别有用。
    cpp 复制代码
    using MyInt = int; // 将MyInt作为int的别名
    using Vec = std::vector<int>; // 将Vec作为std::vector<int>的别名
  2. 函数引用

    函数引用必须被初始化为一个具体的函数,并且不能被重新赋值。函数引用的类型与它所引用的函数的类型相同。例如:

    cpp 复制代码
    void (&funcRef)(int) = myFunction; // 引用返回void,接受int参数的函数
  3. 函数作为参数

    可以将函数作为参数传递给另一个函数,此时需要指定函数的类型。例如:

    cpp 复制代码
    void callFunction(void (*func)(int)) {
        func(10);
    }
  4. std::function

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

cpp 复制代码
#include <functional>
#include <iostream>

void greet() {
    std::cout << "Hello, World!" << std::endl;
}

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

例子

using

cpp 复制代码
#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

cpp 复制代码
#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;
}
相关推荐
CoderCodingNo21 小时前
【GESP】C++五级/六级练习题(前缀和/动态规划考点) luogu-P1719 最大加权矩形
开发语言·c++·动态规划
xiaoye-duck21 小时前
吃透C++类和对象(中):const成员函数与取地址运算符重载深度解析
c++
学嵌入式的小杨同学21 小时前
循环队列(顺序存储)完整解析与实现(数据结构专栏版)
c语言·开发语言·数据结构·c++·算法
Yu_Lijing21 小时前
基于C++的《Head First设计模式》笔记——适配器模式
c++·笔记·设计模式
txinyu的博客21 小时前
C++ 单例模式
c++·单例模式
点云SLAM21 小时前
C++ 设计模式之工厂模式(Factory)和面试问题
开发语言·c++·设计模式·面试·c++11·工厂模式
玖釉-21 小时前
[Vulkan 学习之路] 05 - 缔结契约:创建逻辑设备 (Logical Device)
c++·windows·图形渲染
彩妙不是菜喵21 小时前
c++:初阶/初始模版
开发语言·c++
想唱rap21 小时前
MySQL表得内外连接
服务器·数据库·c++·mysql·ubuntu
A7bert77721 小时前
【DeepSeek R1部署至RK3588】RKLLM转换→板端部署→局域网web浏览
c++·人工智能·深度学习·ubuntu·自然语言处理·nlp