尚方宝剑之说
优势通过在需要的地方插入代码,您的程序将在函数调用和返回部分中花费更少的时间。它应该使您的代码运行得更快,即使它变得更大(参见下面)。内联琐碎的访问器可能是有效内联的一个例子。通过将其标记为内联,您可以将函数定义放在头文件中(即,它可以包含在多个编译单元中,而无需链接器的抱怨)。缺点它可以使您的代码更大(也就是说,如果您将内联用于非平凡的函数)。因此,它可能引发分页并挫败编译器的优化。它稍微破坏了您的封装,因为它公开了对象处理的内部(但是,每个“私有”成员也会这样做)。这意味着您不能在PIMPL模式中使用内联。它稍微破坏了您的封装2:C+内联是在编译时解析的。这意味着,如果您更改内联函数的代码,则需要使用它重新编译所有代码,以确保它将被更新(出于同样的原因,我避免函数参数的默认值)当在头文件中使用时,它会使头文件更大,从而用户不关心的代码稀释有趣的信息(如类方法的列表)(这就是我在类内声明内联函数的原因,但将在类主体之后的标题中定义它,而不是在类主体中)。内联魔术编译器可以或不可以内联您标记为内联的函数;它还可能决定在编译或链接时内联未标记为内联的函数。内联的工作方式类似于编译器控制的复制/粘贴,这与预处理器宏非常不同:宏将被强制内联,将污染所有名称空间和代码,不容易调试,即使编译器将其判定为效率低下,也会执行。在类本身的主体中定义的类的每个方法都被认为是“内联”(即使编译器仍然可以决定不内联它)。虚拟方法不应该是不可缺少的。不过,有时,当编译器能够确定对象的类型(即在同一个函数体中声明和构造对象)时,甚至一个虚拟函数也会内联,因为编译器确切地知道对象的类型。模板方法/函数并不总是内联的(它们在标头中的存在不会使它们自动内联)。“内联”之后的下一步是模板元编程。也就是说,通过在编译时“内联”您的代码,有时编译器可以推断出函数的最终结果.所以复杂的算法有时可以归结为一种return 42 ;声明。这是给我的极端衬里..它在现实生活中很少发生,它使编译时间更长,不会使您的代码膨胀,并将使您的代码更快。但是,就像圣杯一样,不要试图在任何地方应用它,因为大多数处理都不能以这种方式解决.不过,这还是挺酷的.。-p