运营商是否总是内联?
struct foo {
void operator ()() {
// Do tons of work.
}
};
int main() {
foo f;
f();
}
答案 0 :(得分:2)
与其他任何函数一样,运算符是正常函数。
答案 1 :(得分:1)
不,他们不是。编译器可以完全自由地忽略函数内联的所有和任何请求。它不能忽视的是它必须给它们内部链接,因此包含它们的标题可以包含在多个翻译单元中。
答案 2 :(得分:1)
编译器是前所未有的(正式)不可预测的内联决策主。好的编译器将在文档中提供有关其实现行为的一些指导。代码越复杂,内联的可能性就越小,你可以找到一些关于维基百科上有什么/不倾向于内联的例子。
“做大量的工作”本身表明你的预期操作员太复杂,大多数编译器都没有内联。
Microsoft的Visual C ++编译器可以在生成警告时生成警告,当它决定内联一个没有内联标记的函数时,以及它没有内联标记为内联的函数。我喜欢它以感受可以内联的内容。