C/C++面试:虚函数可以是内联函数吗?
发布日期:2022-03-16 03:25:37
浏览次数:43
分类:技术文章
本文共 850 字,大约阅读时间需要 2 分钟。
回答
- 虚函数可以是内联函数,内联是可以修饰虚函数的,但是当虚函数表现动态性时就不能内联
- 内联是在编译器建议编译器内联,而虚函数的多态性在运行期间,编译器无法知道运行期调用哪个代码,因此虚函数表现为多态性(运行期)不可以内联
- inline virtual唯一可以内联的时候:编译器知道所调用的对象是哪个类(如 Base::who()),这只有在编译器具有实际对象而不是对象的指针或者引用时才会发生
代码实例如下:
#includeusing 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;}
转载地址:https://blog.csdn.net/zhizhengguan/article/details/122665132 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月29日 12时03分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity中为什么不能对transform.position.x直接赋值?
2019-04-27
使用对象池优化性能
2019-04-27
Lua(一)——Lua介绍
2019-04-27
Unity中父子物体的坑
2019-04-27
基础知识——进位制
2019-04-27
Lua(十三)——模块与包
2019-04-27
Lua(四)——变量
2019-04-27
Lua(十四)——元表
2019-04-27
Lua(十五)——协同程序
2019-04-27
Lua(十六)——文件
2019-04-27
Lua(十七)——面向对象
2019-04-27
Lua(十八)——错误处理,垃圾回收
2019-04-27
xLua(一)——介绍
2019-04-27
xLua(二)——下载
2019-04-27
Unity中实现解析Json文件
2019-04-27
Unity自带Json解析库——JsonUtility
2019-04-27
Unity中使用ViedoPlayer操作视频文件
2019-04-27
JAVA Freemarker(9)---常见语法大全
2019-04-27
Java MyBatis(1)--- Generator 详解
2019-04-27
Java MyBatis(2)--- generatorConfig.xml详解与运行
2019-04-27