内联等于#define函数?

时间:2014-03-08 14:17:56

标签: c++ optimization c-preprocessor inline

从机器指令的角度来看,inline int GetNumber(int i) { return mNumbers[i]; };是否等于:#define GetNumber(i) mNumbers[i]

mNumbers以这种方式定义:std::vector<int> mNumbers

2 个答案:

答案 0 :(得分:4)

没有

inline有一个保证效果:它允许您在多个翻译单元中定义相同的功能(相同),然后要求在每个使用它的翻译单元中定义该功能。

inline也可以作为提示,应该在机器代码级别内联函数调用,但

  • 该提示可以自由忽略,并且在递归函数的情况下,某些调用必须忽略逻辑,

  • 机器码调用内联与宏扩展不一样,特别是宏不尊重范围。

也许我能给你的最重要的建议是停止对微优化的担忧。现在还为时过早。而过早的优化是邪恶的。

答案 1 :(得分:2)

没有。预处理器宏在文本编辑器中被替换为查询替换,并且在代码传递给编译器之前。内联函数可以将其代码插入到调用站点上。虽然它们看起来很相似,但却完全不同。