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关键字一样退出舞台吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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循环