内联运营商好吗?

Jal*_*eri 11 c++ operators inline-method

运算符和其他方法在C++中进行内联是否有任何区别?我已经搜索过它,但这不是一个常见的问题,正如我所看到的那样.有没有人有充分的理由使用它或避免?注意:显然,我的意思是内联运算符,当它们很小时.

Jer*_*fin 14

虽然编译器之间可能会有所不同,但我希望从编译器的角度来看,运算符只是另一个具有某种不寻常名称的函数,它允许源代码的语法看起来有点不同.

尽管如此,当编译器的代码生成器部分运行时,我预计重载操作符和另一个函数(执行相同的操作)之间的任何差异都会消失.

因此,将其声明为inline或在类定义的主体内定义它将具有与任何其他函数一样多的(很少,取决于您的观点)运算符重载.我通常希望在这两种情况下效果都非常小 - 至少在启用优化时,大多数编译器都会忽略inline关键字并自行决定内联(以及不应该)扩展内容.

请注意,在某种程度上,编译器不能忽略inline关键字 - 必须遵守对"一个定义规则"的一些​​特殊修改,无论函数是否实际内联扩展.

  • 运算符重载**只是另一个函数,没有区别 (2认同)
  • @ K-ballo:从标准的角度来看,你明显是正确的.我希望*从编译器的角度来看它也是正确的 - 但是编译器*可以*根据是否是操作符重载来应用不同的内联规则(尽管我在实践中看到它会感到惊讶) . (2认同)

Ric*_*ard 7

您可以使用该inline关键字向编译器建议内联函数.

编译器没有义务遵守此请求.

运算符类似 - 它们可能会也可能不会内联.

由于编译器不能强制内联,因此可能没有充分的理由使用或避免使用内联提示.因为这就是全部:提示.

在Visual C++中,您可以使用__forceinline关键字强制内联,结果是更大的代码和潜在的性能损失.在精心设计的系统中,消除选项(通过强制执行)通常会导致性能下降,这种情况很常见.即使您使用此关键字,也不是每个函数都可以成功内联.

这里讨论GCC内联.

  • "结果是更大的代码和潜在的性能损失"[或者它可能是更小的代码.或者更快](http://www.parashift.com/c++-faq/inline-and-perf.html)(我承认链接页错误地假定编译器始终内联函数标记为"内联") (2认同)