msvc 的 手册页 说:
告诉编译器永远不要内联特定的 成员函数(类中的函数)。__declspec(noinline)
如果函数很小且不适合,那么不内联函数可能是值得的。 对代码的性能至关重要。也就是说,如果函数是 小并且不太可能被经常调用,例如一个函数 处理错误情况。
请记住,如果函数被标记为 noinline,则调用 函数会更小,因此本身就是编译器的候选者 内联。
class X { __declspec(noinline) int f() { return 0; } // will not inline };
但是我还是不明白:
之间有哪些差异或优点
class X {
__declspec(noinline) int f() {
return 0;
} // will not inline
};
和
class X {
int f() {
return 0;
}
};
?
如果您想使用指向函数的指针来调用该函数,则不应内联它。 而且,如果您编写一个库并导出该函数,则不应内联它。
两个原因都是一样的:如果你想使用函数的地址,你应该声明非内联。