c++内联成员函数问题(转载)

作者:蓝色
链接:https://www.zhihu.com/question/29809743/answer/45701907
来源:知乎

首先inline是实现修饰符,而非声明修饰符,所以应该用于实现部分的修饰(你也可以放置inline在声明,但是没有必要),我相信C++ Primer应该解释的很清楚了。

那么为什么不能screen.h声明函数move,screen.cpp实现move呢?因为inline的代码是直接展开插入到被调用的地方,而非如普通函数的调用一样,需要发生栈操作。即会先去执行被调用函数,再转回来继续执行主调函数。那么,这个时候,你要么在main.cpp也如同x.cpp一样再次inline实现一次这个函数,要么你就干脆只在x.h的class body里面实现了,当然如果你和我一样有“代码洁癖”的话,可以像我一样先在class里面声明,再在class body外面实现:LLVMPascalCompiler/scanner.h at master · FrozenGene/LLVMPascalCompiler · GitHub

其实我觉得inline现在蛮鸡肋的了,编译器已经进化到今天这个地步了,我认为完全可以交给编译器自己去决定是否inline(因为即使你给了inline,也只是给编译器提醒可以inline,最后inline与否还是需要编译器自己来决定),或许某一天inline将会和register关键字一样退出舞台吧。

posted @   jixhua  阅读(356)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
历史上的今天:
2019-03-25 ES6学习笔记(十三)Iterator遍历器和for...of循环
点击右上角即可分享
微信分享提示