我刚刚在Microsoft Website上研究了C ++关键字inline
的使用和好处/陷阱,我理解了所有这些。
我的问题是:如果编译器评估函数以查看是否内联它们会导致代码更有效并且inline
关键字只是编译器的建议,为什么还要烦恼关键字呢?
编辑:<罢工>很多人都抱怨我使用__inline
代替inline
。我想指出__inline
是微软特有的:所以它没有错,它不一定是你习惯的。(也修复了网站链接)
EDIT2:重新格式化问题以指示inline
关键字(用于所有C ++),而不是Microsoft特定的__inline
关键字。
答案 0 :(得分:7)
首先,它不是__inline
,而是inline
。
其次,一个定义规则中的效果inline
无疑是重要的。它允许您多次定义函数并让编译器来处理它。
第三,关于实际的inilining,这是你不仅向编译器表达关于该函数的意见的方式,而且也是那些可能稍后阅读你的代码的人。在许多情况下,这是一种释放蒸汽的方法,可以这么说。基本上,这是你告诉其他人和你自己的一种方式:“我觉得这个功能太小(或太专业)无法证明调用开销,所以不要让我对这个讽刺负责。我做了所有我如果不是因为你公司范围内的愚蠢编码标准,我会把它变成一个宏“。在这方面,它是一种形式化的评论。
第四,看到你使用了关键字的特定于实现的拼写,我注意到一些实现提供了替代关键字,让你有机会更多......呃...... 有说服力你希望将这个功能内联起来。在MS编译器中将是__forceinline
。
答案 1 :(得分:2)
关键字为inline
,而非__inline
。
inline
不仅仅是一个建议,它是在不破坏一个定义规则的情况下在头文件中包含函数定义的最佳标准兼容方式。
答案 2 :(得分:0)
从MSDN中的文档来看,我认为这是一个纯粹务实的事情,主要是为了C程序的利益。
由于inline
是C中的有效标识符名称,因此在C中需要另一个关键字。
就个人而言,如果我的源代码最终在C和C ++程序之间共享(显然在Visual Studio中),我只会考虑使用它。