返回顶部
首页 > 资讯 > 精选 >C++ 内联函数与虚拟函数的异同
  • 559
分享到

C++ 内联函数与虚拟函数的异同

内联函数虚拟函数c++代码可读性 2024-04-17 09:04:02 559人浏览 八月长安
摘要

内联函数将函数体嵌入调用点,提升性能和代码体积,但可读性较低;虚拟函数通过多态性调用子类覆写的函数,提高灵活性,但运行时开销较高。 c++ 内联函数与虚拟函数的异同 内联函数 内联函数

内联函数将函数体嵌入调用点,提升性能和代码体积,但可读性较低;虚拟函数通过多态性调用子类覆写的函数,提高灵活性,但运行时开销较高。

c++ 内联函数与虚拟函数的异同

内联函数

内联函数是编译器在调用时将函数体嵌入到调用点,而不是执行函数调用过程的函数。

优点:

  • 提升性能:避免调用开销。
  • 减小代码体积:函数体不会重复出现在多个调用点。

缺点:

  • 编译时间增加:需要为每个调用点编译函数体。
  • 代码可读性下降:函数体分散在整个代码库中。

语法:

inline int sum(int a, int b) {
  return a + b;
}

虚拟函数

虚拟函数是通过继承机制实现多态性的函数。当调用父类对象上的虚拟函数时,实际调用的函数由对象的动态类型决定。

优点:

  • 实现多态性:子类可以重写父类的虚拟函数。
  • 提高代码的可扩展性和灵活性。

缺点:

  • 运行时开销:需要维护虚函数表和间接调用。
  • 代码复杂度增加:需要使用 virtualoverride 关键字。

语法:

class Base {
 public:
  virtual void print() {
    std::cout << "Base" << std::endl;
  }
};

class Derived : public Base {
 public:
  virtual void print() override {
    std::cout << "Derived" << std::endl;
  }
};

异同比较:

特征内联函数虚拟函数
调用机制函数体嵌入间接调用
性能更高较低
代码体积更小更大
可读性较低较高
多态性不支持支持

实战案例:

可以用内联函数实现简单的数学运算,例如求和:

inline int sum(int a, int b) {
  return a + b;
}

int main() {
  std::cout << sum(1, 2) << std::endl;  // 输出:3
}

可以用虚拟函数实现图形绘制接口:

class Shape {
 public:
  virtual void draw() = 0;
};

class Circle : public Shape {
 public:
  virtual void draw() override {
    std::cout << "Drawing a circle" << std::endl;
  }
};

int main() {
  Shape* shape = new Circle();
  shape->draw(); // 输出:Drawing a circle
}

以上就是C++ 内联函数与虚拟函数的异同的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: C++ 内联函数与虚拟函数的异同

本文链接: https://lsjlt.com/news/604962.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ 内联函数与虚拟函数的异同
    内联函数将函数体嵌入调用点,提升性能和代码体积,但可读性较低;虚拟函数通过多态性调用子类覆写的函数,提高灵活性,但运行时开销较高。 C++ 内联函数与虚拟函数的异同 内联函数 内联函数...
    99+
    2024-04-17
    内联函数 虚拟函数 c++ 代码可读性
  • C++ 内联函数与虚拟函数的性能权衡
    内联函数通常比虚拟函数性能更高,因为消除了函数调用开销,但会增加代码膨胀和调试难度;虚拟函数提供多态性,使对象按类型调用正确方法,代码更清晰,但性能劣于内联函数。 C++ 内联函数与虚...
    99+
    2024-04-28
    性能 c++
  • C++ 内联函数与函数指针的区别
    内联函数直接展开而不调用,而函数指针存储指向函数地址的变量,允许间接调用函数。 C++ 内联函数和函数指针的区别 什么是内联函数? 内联函数是编译器在编译时直接展开的函数。这意味着内联...
    99+
    2024-04-16
    函数指针 内联函数 c++
  • C++ 中函数指针与函数对象的异同?
    函数指针和函数对象都是处理函数作为数据的机制。函数指针是指向函数的指针,而函数对象是包含重载的 operator() 的对象。两者都可以捕获变量并创建闭包。不同之处在于,函数指针是原始类...
    99+
    2024-04-12
    函数指针 函数对象 c++
  • PHP 函数与 Flutter 函数的异同
    php 和 flutter 函数的主要区别在于声明、语法和返回类型。php 函数使用隐式返回类型转换,而 flutter 函数显式指定返回类型;php 函数可通过 指定可选参数,而 f...
    99+
    2024-04-24
    php函数
  • PHP 函数与 HTML 函数的异同
    php 函数和 html 函数的角色不同:php 处理后台逻辑,通过 echo 或 print 输出结果;html 负责创建网页结构,由浏览器解释并显示。其异同如下:执行位置:php 函...
    99+
    2024-04-24
    html php
  • C++ 内联函数与宏的对比
    内联函数展开为代码,消除调用开销,但避免函数体过大和递归调用;宏是文本替换,轻量级但难维护,用于常量和简短代码片段。实战案例:内联函数实现斐波那契数列,宏定义常量 pi。 C++ 内联...
    99+
    2024-04-17
    c++ 内联函数 堆栈溢出
  • C++ 函数重载和函数内联
    函数重载和函数内联函数重载允许使用相同名称创建多个函数,但参数列表不同,针对不同输入类型编写特定代码。函数内联则是一种编译器优化,将函数代码直接插入调用点,提高程序速度。 C++ 函数...
    99+
    2024-04-16
    c++ 函数重载 函数内联
  • C++宏函数和内联函数的使用
    目录1. 宏常量&宏函数1.1 定义1.2 使用宏函数的注意事项2. 内联函数2.1 定义2.2 某些情况编译器不会做内联编译3. 补充3.1 宏定义和函数的区别3.2 宏定...
    99+
    2024-04-02
  • C++ 引用与内联函数详情
    目录引用初阶什么是引用为何要有引用引用指向同一块空间引用的特性定义时必须初识化一个变量可以多次引用引用一旦引用了一个实例,不能在再引用其他的实例引用进阶常引用权限临时变量具有常属性引...
    99+
    2024-04-02
  • c++虚函数与虚函数表原理
    目录1.什么是虚函数2.虚函数会影响类的内存3.了解虚函数表--->通过虚函数表的指针去访问数据4.虚函数声明1.什么是虚函数 用virtual 修饰的成员函数叫虚函数 小知识...
    99+
    2024-04-02
  • C++ 函数重载与函数模板有什么异同?
    函数重载和函数模板在目的和实现方式上不同。函数重载创建同名但参数不同的函数,而函数模板描述了可根据类型参数生成函数实例的函数族。函数重载在编译时生成特定函数,函数模板在运行时生成,且效率...
    99+
    2024-04-27
    函数重载 函数模板 c++
  • PHP 函数与 Ruby 函数有何异同?
    php和ruby函数的差异在于:语法:php使用function关键字,ruby使用def关键字定义函数。默认返回值:php不返回时为null,ruby为nil。可变参数:php支持,r...
    99+
    2024-04-24
    php 函数 ruby 函数
  • C++ 虚函数与纯虚函数的使用与区别
    目录什么是虚函数:虚函数的注意事项:纯虚函数纯虚函数的注意事项:虚函数与纯虚函数区别什么是虚函数: 虚函数 是在基类中使用关键字 virtual 声明的函数,在C++ 语言中虚函数...
    99+
    2024-04-02
  • C++ 内联函数详解
    目录一、C++ 内联函数1.内联2.语法3.评价总结一、C++ 内联函数 1.内联 C 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销。但是由于宏函数的...
    99+
    2024-04-02
  • C++内联函数详情
    内联函数是C++当中为了提高程序运行效率的设计,老实讲我没有在其他语言当中看到类似的设计。它和常规函数之间的主要区别不在于编写的方式,而是在于C++编译器会将内联函数组合到程序当中...
    99+
    2024-04-02
  • java函数——构造函数与成员函数的异同点
    构造函数和成员函数的异同点1、外界调用角度构造函数只能在创建对象时调用;成员函数只能在对象创建之后调用,可以重复的。相关视频教程分享:java视频2、返回值角度构造函数不需要返回值;成员函数可需可不需。3、权限修饰符构造函数可以用任意权限修...
    99+
    2015-09-16
    java入门 java 构造函数 成员函数 区别
  • c++ 内联函数和普通函数的区别
    前言 内联函数是c++为了提高程序的运行速度做的改进,它与普通函数区别在于: 编译器如何将它们组合到程序中。所以我们需要深入到程序内部。 我们的最终的可执行程序由 一组机器指令组成...
    99+
    2024-04-02
  • C++ 函数可以声明为内联函数吗?内联函数有什么优点?
    内联函数是直接嵌入调用处的特殊函数,可提高效率、优化代码和增强可读性。步骤如下:1. 使用 inline 关键字声明函数;2. 消除函数调用的开销;3. 优化编译器性能;4. 提高可读性...
    99+
    2024-04-19
    优点 内联函数 c++ 代码可读性
  • C++ 友元函数与虚函数的交互
    在 c++++ 中,友元函数与虚函数交互使友元函数可以访问虚函数,并调用派生类中的友元函数访问基类的私有成员。这种交互可用于访问继承体系中隐藏的数据或实现多态行为。 C++ 友元函数与...
    99+
    2024-04-16
    c++ 虚函数 友元
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作