0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++基础知识之函数2

jf_78858299 来源:QStack 作者:月下西楼 2023-04-03 10:34 次阅读

内联函数

C++中,我们可以使用inline关键字来定义内联函数。内联函数是一种特殊的函数,它在编译时会被直接嵌入到调用它的代码中,从而避免了函数调用的开销,提高了程序的执行效率。内联函数的定义通常比较短小,否则它的嵌入代码会导致程序的体积增大,从而降低程序的性能。另外,内联函数的使用也不是万能的,它只适用于一些简单的函数,对于复杂的函数,我们还是应该使用普通的函数。

使用和定义

在C++中,我们可以使用inline关键字来定义内联函数。内联函数的定义通常放在头文件中,以便在多个源文件中使用。下面是一个简单的内联函数的例子:

inline int max(int a, int b) {
    return a > b ? a : b;
}

在上面的例子中,max函数是一个内联函数,它的定义前面有inline关键字。当我们在程序中调用max函数时,编译器会将其直接嵌入到调用它的代码中,从而避免了函数调用的开销。

优点

  • 提高程序的执行效率。由于内联函数在编译时会被直接嵌入到调用它的代码中,从而避免了函数调用的开销,因此可以提高程序的执行效率。
  • 可以避免一些函数调用带来的问题。例如,函数调用会导致一些寄存器的值被保存和恢复,从而影响程序的执行效率。而内联函数的嵌入代码可以避免这些问题。

缺点

  • 可能会导致代码体积增大。由于内联函数的嵌入代码会被直接嵌入到调用它的代码中,因此可能会导致代码体积增大,从而降低程序的性能。
  • 可能会导致代码重复,效率降低。由于内联函数的嵌入代码会被直接嵌入到调用它的代码中,因此可能会导致代码重复,可能会导致编译时间增加。

constexpr函数

在C++11中,我们可以使用constexpr关键字来定义constexpr函数。constexpr函数是一种特殊的函数,它在编译时就能够计算出结果,从而可以用于一些需要在编译时确定的场合。

❝需要注意的是,constexpr函数的定义和使用有一些限制,例如它的返回值类型必须是字面值类型,它的参数和函数体必须是常量表达式等等。

constexpr函数的定义和使用

在C++11中,我们可以使用constexpr关键字来定义constexpr函数。下面是一个简单的constexpr函数的例子:

constexpr int factorial(int n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

在上面的例子中,factorial函数是一个constexpr函数,它的定义前面有constexpr关键字。当我们在程序中调用factorial函数时,编译器会在编译时就计算出结果,从而可以用于一些需要在编译时确定的场合。

优点

  • 在编译时就能够计算出结果,从而可以用于一些需要在编译时确定的场合,可以提高程序的执行效率。
  • 由于constexpr函数的定义通常比较简单,因此可以在头文件中定义,从而方便其他文件的使用。

缺点

  • 定义和使用有一些限制。由于constexpr函数的定义和使用有一些限制,因此不能在所有的场合都使用constexpr函数。
  • 函数通常需要在编译时计算出结果,因此可能会增加代码量。 为什么会增加代码量呢,例如,在下面的代码中,我们定义了一个constexpr函数factorial,它的定义比较简单,但是在编译时会生成一些额外的代码:
constexpr int factorial(int n) {
    return n <= 1 ? 1 : n * factorial(n - 1);
}

int main() {
    std::cout << factorial(5) << std::endl;
    return 0;
}

在上面的代码中,编译器会在编译时生成一些额外的代码,用于计算factorial(5)的结果。这些额外的代码可能会增加程序的代码量,从而影响程序的可读性和维护性。因此,在使用constexpr函数时,需要权衡代码量和执行效率之间的关系,选择合适的方案。

函数指针

在C++中,函数指针是一种指向函数的指针,它可以用于调用函数或者作为函数的参数和返回值。函数指针的类型由函数的返回值类型和参数类型决定,例如,下面是一个函数指针的定义:

int (*p)(int, int);

在上面的代码中,我们定义了一个函数指针p,它指向一个返回值类型为int,参数类型为int和int的函数。

函数指针的使用

函数指针可以用于调用函数或者作为函数的参数和返回值。例如,下面是一个使用函数指针的例子:

int add(int a, int b) {
    return a + b;
}

int sub(int a, int b) {
    return a - b;
}

int calc(int (*p)(int, int), int a, int b) {
    return p(a, b);
}

int main() {
    int a = 1, b = 2;
    int c = calc(add, a, b);
    int d = calc(sub, a, b);
    std::cout << c << std::endl; // 输出 3
    std::cout << d << std::endl; // 输出 -1
    return 0;
}

在上面的代码中,我们定义了两个函数add和sub,它们分别用于求两个整数的和和差。然后,我们定义了一个函数calc,它有三个参数:一个函数指针p,两个整数a和b。calc函数的作用是调用函数指针p,并将a和b作为参数传递给它。在main函数中,我们使用calc函数来计算两个整数的和和差,并输出结果。

除了回调函数,函数指针还可以用于实现函数对象和函数指针数组。函数对象是一种类对象,它重载了函数调用运算符operator(),从而可以像函数一样被调用。函数指针数组是一种数组,它的元素是函数指针,可以用于实现多态和动态调用等功能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66772
  • 内联函数
    +关注

    关注

    0

    文章

    10

    浏览量

    2191
收藏 人收藏

    评论

    相关推荐

    c语言基础知识

    c语言基础知识
    发表于 08-17 17:03

    电子技术入门维修基础知识

    电子技术入门维修基础知识
    发表于 08-17 20:03

    基础知识开关电源当中的元器件

    基础知识开关电源当中的元器件资料来自网络资源
    发表于 07-06 22:09

    【HarmonyOS基础知识】什么是HarmonyOS

    简短的视频,带你了解HarmonyOS基础知识什么是HarmonyOS
    发表于 01-20 08:00

    关于C语言的基础知识

    一、C语言基础知识关于C语言C语言相对于汇编是属于高级语言,写好的C语言在编译之后首先被翻译成汇编指令,而汇编指令是和指令吗对应的,经过汇编
    发表于 08-20 07:03

    详细讲解C++串口的相关知识

    大家可以先参考一下这篇blog,C++串口通信里面详细讲解了C++串口的相关知识,以及一些函数的讲解。下面我也会根据他的blog再讲解。二、实现过程1、打开串口:使用
    发表于 08-24 06:56

    C++C/C++程序设计教程_C/C++概述

    C++基础知识,简要介绍了C++的一些简单知识,概念,函数
    发表于 12-25 10:15 0次下载

    C++语言基础知识讲解

    C++语言基础知识讲解,喜欢的朋友可以下载来学习。
    发表于 01-14 15:30 21次下载

    matlab基础知识简介

    介绍了matlab的变量,函数,文件等基础知识
    发表于 12-17 17:01 10次下载

    Visual C++教程之C++基础知识介绍

    本文档的主要内容详细介绍的是Visual C++教程之C++基础知识介绍主要内容包括了:1 类和对象,2 类的成员及特性,3 继承和派生类
    发表于 02-15 15:59 9次下载
    Visual <b class='flag-5'>C++</b>教程之<b class='flag-5'>C++</b>的<b class='flag-5'>基础知识</b>介绍

    C++程序设计的基础知识初步了解C++的资料免费下载

    本文档的主要内容详细介绍的是C++程序设计的基础知识初步了解C++的资料免费下载包括了:1 认识C++,2 C++的现状和发展,3
    发表于 06-10 08:00 25次下载
    <b class='flag-5'>C++</b>程序设计的<b class='flag-5'>基础知识</b>初步了解<b class='flag-5'>C++</b>的资料免费下载

    C++核心编程基础知识大全免费下载

    C++核心编程基础知识大全免费下载
    发表于 12-03 18:06 2次下载

    C/C++基础知识汇总

    这是一篇五万字的C/C++知识点总结,包括答案。
    的头像 发表于 06-12 15:10 1941次阅读

    C++基础知识

    C++基础知识
    的头像 发表于 01-12 11:00 1115次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>基础知识</b>

    C++基础知识函数1

    函数C++ 中的一个重要概念,它可以让我们将一段代码封装起来,然后在需要的时候调用它。C++ 中的函数有以下几个特点: * 函数
    的头像 发表于 04-03 10:34 349次阅读