首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么返回类型不能是函数类型,而是c++中的函数指针?

在C++中,返回类型不能是函数类型,而是函数指针的原因有以下几点:

  1. 函数类型的大小不确定:函数类型的大小取决于函数的实现,而不同的函数可能有不同的实现,因此无法确定函数类型的大小。而函数指针的大小是确定的,因为它只是一个指向函数的地址。
  2. 函数类型无法进行赋值和比较:函数类型不能直接进行赋值和比较操作,因为函数类型是不可复制的。而函数指针可以进行赋值和比较,因为它只是一个指向函数的地址,可以通过指针进行间接调用。
  3. 函数指针可以作为回调函数:函数指针可以作为参数传递给其他函数,用于实现回调机制。通过函数指针,可以在运行时动态地指定要调用的函数,从而实现灵活的程序设计。
  4. 函数指针可以实现多态:通过函数指针,可以实现类似于面向对象编程中的多态特性。不同的函数指针可以指向不同的函数实现,从而实现不同的行为。

总结起来,返回函数指针而不是函数类型,是因为函数指针具有确定的大小、可以进行赋值和比较、可以作为回调函数和实现多态等优势。在C++中,函数指针是一种常用的机制,用于处理函数的灵活调用和动态行为。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++函数指针 ① ( 函数三要素 | 函数类型 | 函数指针类型 | 函数类型重命名 )

: 函数输入形参列表 ; 包含函数输入参数 , 参数列表可以没有参数 , 也可以有多个参数 ; 参数列表类型和个数会影响函数返回类型 ; 函数返回值 : 函数体执行返回结果 , 没有返回...void ; 函数执行后返回数据类型 , 可以是任意数据类型 , 包括基本数据类型指针类型 , 返回类型必须与函数定义时返回类型一致 ; 2、函数类型 函数类型返回值 , 参数列表类型...和 个数 共同决定 ; 函数类型示例 : 下面的函数类型 表示函数 , 返回值为空 , 参数为 int 类型 ; void (int) 3、函数指针类型 函数指针类型 指指向函数指针变量类型...; 每个函数都有一个入口地址 , 这个地址一个指针 , 指向函数代码块在内存位置 ; 函数指针变量就是用来存储这个入口地址变量 , 函数指针变量类型需要与被调用函数类型匹配 , 即函数指针类型应该与被调用函数返回类型和参数列表类型一致...; newfunname 函数重命名新名称 ; parameterlist 函数参数列表 ; 为 函数类型函数指针 类型 重命名 : // void (int) 函数类型重命名, 可以使用该类型指针接收函数地址

40650

C语言指针函数参数,指针函数返回类型

有时候我们可以使用函数返回值来回传数据,在简单情况下可以,但是如果返回值有其它用途(例如返回函数执行状态量),或者要回传数据不止一个,返回值就解决不了了,所以要引用上指针来传递。...指针函数返回类型: 程序编译后,每个函数都有执行第一条指令地址即首地址,称[函数指针函数指针即指向函数指针变量,要间接调用函数可以使用指针变量来实现。...int (*pf)(int, int); 通过将pf与括号“*”强制组合组合在一起,表示定义pf一个指针,然后与下面的“()”再次组合,表示指针指向一个函数,括号里表示为int类型参数,...因此,pf指向函数指针,该函数返回值为int。函数指针返回指针函数含义大不相同。函数指针本身一个指向函数指针指针函数本身一个返回值为指针函数。...数组指针变量加减一个整数可使指针移动指向后面或数组元素,而函数指针移动毫无意义函数调用“(* 指针变量名)”两边括号不可少,其中“*”不应该理解为求值运算,在此处只是一种表示符号。

2.6K20
  • Golang 函数返回类型接口时返回对象指针还是值

    1.接口简介 Interface 一组抽象方法(未具体实现方法,仅包含方法名参数返回方法)集合,如果实现了 interface 所有方法,即该类型就实现了该接口。...注意: (1)接口中不能含有属性; (2)每种类型都能实现多个接口; (3)未初始化接口类型变量值为 nil。...接口声明格式: type InterfaceName interface { //方法列表 } 2.函数返回类型接口时返回对象指针还是值 函数返回类型接口时返回对象指针还是值,这个要看具体需要...期望原对象在后续操作中被修改则返回对象指针返回对象值则返回对象副本,对对象副本修改不会影响原对象。 返回对象指针示例。...=createEmployeeObj() o.Set() o.Print() e.Print() } 输出结果: company=alibaba company=alibaba 可见函数返回类型接口时返回对象指针

    8K30

    C++函数重载 ④ ( 函数指针定义三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

    返回值 不是 " 函数重载 " 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型 参数列表类型...函数类型 定义 函数指针 首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数 参数列表 2 个 int 参数 , 返回 int ;..., 返回 int ; // 定义函数指针类型 func_ptr , 参数列表 2 个 int 参数 , 返回 int typedef int (*func_ptr)(int a, int b...= add; 4、代码示例 - 不同方式定义函数指针 在下面的代码 , 分别使用上述章节中讲解三种方式 , 定义了函数指针 ; 代码示例 : // 包含 C++ 头文件 #include "iostream...返回 int typedef int (func)(int a, int b); // 定义函数指针类型 func , 参数列表 2 个 int 参数 , 返回 int typedef int

    18130

    C++函数重载 ④ ( 函数指针定义三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

    返回值 不是 " 函数重载 " 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型 参数列表类型...函数类型 定义 函数指针 首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数 参数列表 2 个 int 参数 , 返回 int ;..., 返回 int ; // 定义函数指针类型 func_ptr , 参数列表 2 个 int 参数 , 返回 int typedef int (*func_ptr)(int a, int b...= add; 4、代码示例 - 不同方式定义函数指针 在下面的代码 , 分别使用上述章节中讲解三种方式 , 定义了函数指针 ; 代码示例 : // 包含 C++ 头文件 #include "iostream...返回 int typedef int (func)(int a, int b); // 定义函数指针类型 func , 参数列表 2 个 int 参数 , 返回 int typedef int

    17930

    C++函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用 typedef 定义函数指针类型 )

    一、函数指针语法 1、函数名直接调用函数 定义一个函数 , 如下 函数类型 int(int, int) ; int add(int x, int y) { printf("x + y = %d\n...也可以 调用函数 ; 函数 int add(int x, int y) 类型 int(int, int) , 函数类型只需要注明函数 返回值 和 参数列表 类型即可 ; 直接定义 int(int..., int) 函数类型 指针 , 将 add 函数名 ( 函数地址 ) 直接 赋值给 函数指针 , 可以直接通过函数指针调用函数 ; 下面的代码 , 定义了函数指针 p , 指向 int(int,... 函数返回类型 ; newfunname 定义函数类型名称 ; parameterlist 函数参数列表 ; 定义函数类型示例 : 将 int add(int x, int y) 函数...关键字 ; returntype 函数返回类型 ; * 表示 定义 指针类型 , 指向函数地址 ; newfunname 定义函数类型名称 ; parameterlist 函数参数列表

    45860

    C++函数指针指针函数返回值为函数指针函数浅谈

    C++函数指针指针函数返回值为函数指针函数浅谈 引言 函数指针指针函数C重要而容易混淆概念,博主将通过两个实例来说明这两个截然不同概念。...而返回值为函数指针指针函数就更难理解了,放在文章最后来介绍。 函数指针 函数指针一种特殊 指针,它指向函数入口。...endl; return 0; } 指针函数 指针函数一种返回值为指针 函数。...例如A *createA();声明了一个返回值为指向A类型指针,参数列表为空函数(这句话读起来可能有一··绕口),实例说明 /** * 作者:lyn * 时间:2018.10.30 * 该程序用来演示指针函数...先给一个例子: /* *本例SGISTL源码一个函数,比普通返回值为函数指针函数要更复杂一点 *因为本例函数参数也是一个函数指针 */ void (* set_malloc_handler

    1.6K10

    C++函数指针 ④ ( 函数指针函数参数 | 使用函数指针间接调用函数 | 函数指针做参数 | 函数指针类型本质 | 函数指针做参数意义 )

    一、函数指针函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., int); 定义函数 接收 pFun_add 类型形参作为参数 , 该类型 函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数调用 函数指针 指向 函数 ; // 传入函数指针...动态传入 ; 函数指针类型 该用法 框架基础 , 将 函数执行逻辑 与 软件框架 进行解耦 ; 也就是 将 任务调用者 与 任务实现者 进行了隔离 , 解耦合 ; 下面的示例 , 可以将 函数指针类型变量...约定了 函数 参与者 ; 函数返回类型 约定了 函数 执行结果 ; 只要 将 子任务 按照 上述 " 函数指针类型 " 约定 , 开发出 符合要求 函数 , 就可以将其作为一个 子任务 传递到...; 错误处理 : 使用函数指针 , 将错误处理函数作为参数传递给其他函数 , 在发生错误时立即调用适当错误处理函数 , 无需返回到调用堆栈较高层次 ; 二、代码示例 - 函数指针函数参数 代码示例

    97650

    C++函数返回结果为自定义类型

    所以,规定不能返回局部对象引用和指针函数返回不能数组或函数类型,但可以是指向数组或函数指针C++函数返回局部变量时,该返回值可能类型指针类型和引用类型。...数组形参 数组两个特殊性质: 1.不能拷贝数组:无法值传递 2.使用数组时通常转化成指针:传递参数时,实际上传递指向数组首元素指针 数组大小对函数调用没影响 int GetInt() {...狗日,这个东西书上也不说,但是代码里面一会儿就出现了,一会儿就出现了,搞人心态。 在C++函数返回自定义类型情况主要分为两种,一种是非引用类型自定义类;另一种引用类型自定义类。...C++基本数据类型限制了函数返回类型,其不像Python一样可以直接返回一个list,list里面可以包含多个想要返回内容。...格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 } 常量指针:int* const,必须初始化,值不会改变 指向常量常量指针:const int* const 始终指向一个常量对象且不能被修改

    1.4K30

    【Kotlin】函数 ③ ( 匿名函数 | 匿名函数函数类型 | 匿名函数隐式返回 )

    文章目录 一、匿名函数 二、匿名函数函数类型 三、匿名函数隐式返回 一、匿名函数 ---- 声明函数时 , 没有 函数函数 匿名函数 ; 匿名函数 可以作为 函数参数 , 也可以作为 函数返回值...Boolean) 扩展函数 , 接收一个 (Char) -> Boolean 类型函数 , 用于 返回匹配给定 匿名函数 字符数 ; /** * 返回匹配给定[谓词 predicate 匿名函数...决定 ; 有 相同 参数顺序 , 参数个数 和 返回类型 函数 , 其 函数类型相同 ; 如上个章节 , 扩展函数 CharSequence.count 接收匿名函数参数 predicate ,...关键字 , 返回返回值 ; 匿名函数 返回值 不需要使用 return 关键字 , 匿名函数 可以 隐式 返回 函数体最后一行语句 ; 代码示例 : 在匿名函数 , 第一行 Int 值 , 第二行...Boolean 值 , 第三行 String 值 , 最后返回最后一行 String 值 ; fun main() { // 声明 函数类型 变量, 并为其赋值 匿名函数 val

    3K20

    C++C++ 引用详解 ③ ( 函数返回不能 “ 局部变量 “ 引用或指针 | 函数 “ 局部变量 “ 引用或指针函数返回值无意义 )

    一、函数返回不能 " 局部变量 " 引用或指针 1、引用通常做右值 之前使用 引用 时 , 都是作为 右值 使用 , 引用只在 声明 同时 进行初始化时 , 才作为左值 , // 定义变量 a...2、函数返回值特点 函数 返回值 几乎很少 引用 或 指针 ; 函数 计算结果 经常是借用 参数 地址 / 引用 进行返回 , 函数 返回值 一般返回一个 int 类型值 , 如果...如果 外部 main 函数 变量 地址 / 引用 , 那么 肯定是从 参数 传入 , 那么这个 地址 / 引用 就不需要返回 , 函数内部修改 , 直接体现在了外部变量 ; 因此...如果 想要 在 函数 , 返回 引用 / 指针 , 函数局部变量 引用 / 指针 返回不出来 , 即使强行返回 引用 / 指针 , 也是当前 局部变量 被 分配 栈内存 地址 , 该函数 执行完毕后..., 该 指针 局部变量 指针 ; 上述两个函数无意义 , 获取到 函数 返回 " 局部变量 " 引用 或 指针 , 然后获取地址 , 发现获取都是随机值 , 都是无意义值 ; num21

    48620

    函数出错返回数据类型

    函数出错返回数据类型有4情况:错误码、NULL值、空对象、异常对象。 1. 错误码 C语言中没有异常这样语法机制,返回错误码便是最常用出错处理方式。...对于查找函数(get、find、select、search、query 等单词开头函数),数据不存在一种正常行为,并非一种异常情况,所以返回表示不存在语义NULL值比返回异常更合理。...2.1 弊端 很多人认为返回NULL值一种不好设计思路两个主要理由: 若函数可能返回NULL值,当使用时忘记做NULL值判断,可能会抛出空指针异常(Null Pointer Exception,NPE...当函数返回数据字符串类型或者集合类型时候,我们可以用空字符串或空集合替代 NULL 值,来表示不存在情况。这样,我们在使用函数时候,就可以不用做 NULL 值判断。...如果函数 public ,你无法掌控会被谁调用以及如何调用(有可能某个同事一时疏忽,传递进了 NULL 值,这种情况也是存在),为了尽可能提高代码健壮性,我们最好在 public 函数做 NULL

    2.2K20

    父类返回子类类型函数写法

    不过由于我们这个 Event 类型比较多,因此希望写一个父类,来一个子类感受下: class DisposableEventBuilder : EventBuilder() { private....build() 我们调用完父类 retryLimit 方法后,想要设置下 delay,结果发现没有这个方法。 “我 X,这什么玩意儿”,你嘟囔了一句。 因为返回父类,所以链式调用掉链子了。...retryLimit return this as T } abstract fun build(): PollingEvent } 这个泛型给父类加了一个泛型参数,这个参数则必须当前类子类...,那么这样的话我们就可以在返回自身类型位置返回 T 这个类型了。...子类改动就很简单了,只需要给父类加一个泛型参数为自己类型即可: class DisposableEventBuilder : EventBuilder

    4.8K10

    Python 字符串返回bool类型函数集合

    字符串返回bool类型函数集合 isspace 功能: 判断字符串是否由一个空格组成字符串 用法: booltype = string.isspace() -> 无参数可传 ,返回一个布尔类型...注意: 由空格组成字符串,不是空字符串 : “’!...=‘’’ istitile 功能: 判断字符串是否一个标题类型 用法 booltype = String.istitle() -> 无参数可传, 返回一个布尔类型 注意: 该函数只能用于英文 isupper...与islower 功能: isupper判断字符串字母是否都是大写 islower判断字符串字母是否都是小写 用法: booltype = string.isupper() -> 无参数可传..., 返回一个布尔类型 booltype = string,islower() ->无参数可传 ,返回一个布尔类型 注意: 只检测字符串里字母,对其他字符不做判断 join与split 稍后见 我们数据类型转换时候见

    2.4K20

    c++类型转换函数

    参考链接: C++类型转换 之前学习,可以将普通类型转换为类类型,需要借助转换构造函数。那么反过来,类类型可以转换为普通类型吗? ...类型转换函数必须成员函数不能指定其返回类型,并且形参必须为空,返回隐含返回类型和转换类型Type相同,在本例子为int。  2....Type表示内置类型名、类类型名或者类型别名(typedef)。除了void外,任何可作为函数返回类型类型都可以定义转换函数目标转换类型。...一般不允许转换为数组或函数类型,但是可以转换为指针类型以及引用类型  3. 类型转换函数一般不应该改变被转换对象,因此转换函数通常属性被定义为const。 ...右值类型转换函数和左值转换构造函数都可以实现隐式类型转换,那么如果二者同时存在于代码,在需要类型转换时,编译器会选择调用谁?

    90720

    C++函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入参数要求 | 参数作返回值 )

    参数使用语言环境 : 引用类型参数只能在 C++ 环境中使用 , 指针类型参数可以用于 C / C++ 两种语言环境 , 因此很多基础库 如 FFMPEG , OpenSL ES 等使用都是指针类型参数...指针作为参数和返回值 ---- 指针作为参数和返回值 : 如果指针作为参数 , 修改 N 维指针指向地址 , 那么需要传入 N + 1 维指针 , 传入指向该 N 维指针 指针参数 ( N + 1...C 语言中参数 分类 : ① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ; ② 指针变量参数 : C 语言中 , 如果要让函数参数可以将结果返回...C++ 引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数情况 , 使参数具有返回结果能力 ; 3 ....引用作为参数和返回值 ---- 引用作为参数和返回值 : 如果引用作为参数 , 修改 N 维指针指向地址 , 那么需要传入 N 维指针引用即可 ,在函数修改该引用 , 即可修改外部被引用变量

    2.2K20

    Python 函数参数类型

    1.前言 Python 函数参数类型比较丰富,比如我们经常见到 *args 和 **kwargs 作为参数。...初学者遇到这个多少都有点懵逼,今天我们来把 Python 函数参数进行分析和总结。 2.Python 函数参数 在 Python 定义函数参数有 5 种类型,我们来一一演示它们。...2.1 必选参数 必须参数最基本参数类型,当你在 Python 函数定义一个必选参数时,每次调用都必须给予赋值,否则将报错。...每次调用参数 a 都“记忆”了原来值,这是因为 Python 函数在定义时候,默认参数a值就被初始化为[],其实a也是一个变量,它指向对象[],每次调用该函数改变 a值则会改变 a指针指向对象值...至于到底传入了哪些关键字,需要我们在函数内部进行显式检查来确定,这种样板代码往往跟我们意图无关。那么 Python 本身能不能限制关键字参数名字呢?当然有!

    3.3K20
    领券