C++中虚函数可以是内联函数吗?
- 1.需要注意的几点:
- 虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现多态性的时候不能内联。
- 内联是在编译器建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性时(运行期)不可以内联。
- inline virtual 唯一可以内联的时候是:编译器知道所调用的对象是哪个类(如 Base::who()),这只有在编译器具有实际对象而不是对象的指针或引用时才会发生。
- 2.代码实例如下:
#include <iostream>using namespace std;// 基类class Base{public:inline virtual void who(){cout << "I am Base\n";}virtual ~Base(){}};// 派生类class Derived:public Base{public:inline void who(){ // 不写inline时隐式内联cout << "I am Derived\n";}}; int main(){// 此处的虚函数 who(),是通过类(Base)的具体对象(b)来调用的,编译期间就能确定了,所以它可以是内联的,但最终是否内联取决于编译器。Base b;b.who();// 此处的虚函数是通过指针调用的,呈现多态性,需要在运行时期间才能确定,所以不能为内联。Base *bptr = new Derived();bptr->who();// 因为Base有虚析构函数(virtual ~Base() {}),所以 delete 时,会先调用派生类(Derived)析构函数,再调用基类(Base)析构函数,防止内存泄漏。delete bptr;bptr = nullptr;return 0;}
C++中虚函数可以是内联函数吗?相关推荐
- Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- C++的内联函数和非内联函数的区别
一.内联函数和非内联函数的定义 1.内联函数 inline void test(); void test() { cout<<"test"<<endl; } ...
- 函数模板、 内联函数
函数重载就是有相同的函数名但参数的个数或类型不同从而根据不同的参数个数和参数类型来调用相应的方法. 我们发现函数重载只是解决了函数命名的问题,但函数体虽然相同我们还是要重复的写,为了解决这 ...
- inline 内联函数详解 内联函数与宏定义的区别
一.在C&C++中 一.inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionName ...
- [课程视频]指针、引用、函数参数、内联函数等
今天气温低.风大,我穿一个略正式的T恤衫.一条大短裤和人字拖在办公室里录制最新一期课程视频.反正拍不到下半身,所以下半身衣着随意我面向的录制环境如下图,我背后是一个绿幕.设备由广东省教学改革项目资金提 ...
- C++编程进阶5(内联函数、如何降低编译成本、处理继承体系中同名不同参的成员函数、私有虚函数)
十七.内联函数 在https://blog.csdn.net/Master_Cui/article/details/106391552中,已经简单的说过内联函数的作用. 函数体较小的内联函数经过编译后 ...
- C语言中内联函数的作用 inline
C语言中内联函数的作用 inline C语言中内联函数到底有什么作用? 试想一下,每当我们在假设就在主函数中调用另外一个函数的时候,那么这个函数就要入栈或者出栈,比如说下面的一个例子: 点击(此处)折 ...
- C++中的内联函数inline
1.Cpp中的内联函数 内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方.对内联函数进行任何修改,都需要重新编译函数的所有客户端,因 ...
- 虚函数(virtual)可以是内联函数(inline)吗?
•虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现多态性的时候不能内联. •内联是在编译器建议编译器内联,而虚函数的多态性在运行期,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态 ...
最新文章
- The 2014 ACM-ICPC Asia Mudanjiang Regional First Round J
- django Cookie,Session和自定义分页
- python的心得体会200字_python_学习心得
- java 弹出下载_java如何实现下载弹出的对话框
- 被问到有没有内核开发经验_一个人就是一个开发团队!成电硬核毕业生自制迷你电脑走红!...
- Android 屏幕适配解决方案汇总
- 阿里巴巴为什么选择Apache Flink?
- zynq开发系列6:创建AXI IP实现PS对PL的数据配置(步骤三配置SDK)
- Android studio 4.0 Layout Inspector查看当前Activity
- 标签打印软件如何制作DataMatrix二维码
- ArcMap10.2 本地安装教程
- 计算机模态分析计算法,ANSYS 入门教程 (33) - 分析类型与求解控制选项 (b) 转自...
- 积分商城SQL表设计
- vue awe-dnd+ant 自定义表格排序显隐
- 第十六周项目3电子词典
- Codeforces - 1102F - Elongated Matrix(建图 + 哈密顿通路)
- 从Otherside土地稀缺体系聊起, Yuga Labs到底在布局什么?
- 手机横屏怎么设置放大字_手机锁屏可以滚动的文字怎么设置?手把手教你如何设置,太简单了...
- DSP程序开发与优化经验之四:TMS320C64x+ DSP------Using Cache
- mysql uncompress_undefined reference to `uncompress'的解决办法