如果我为一个类实现一个运算符,它是否可能不是内联的?

时间:2010-08-01 16:14:36

标签: c++ operator-overloading inline

运营商是否总是内联?

struct foo {
    void operator ()() {
        // Do tons of work.
    }
};

int main() {
    foo f;
    f();
}

3 个答案:

答案 0 :(得分:2)

与其他任何函数一样,运算符是正常函数。

答案 1 :(得分:1)

不,他们不是。编译器可以完全自由地忽略函数内联的所有和任何请求。它不能忽视的是它必须给它们内部链接,因此包含它们的标题可以包含在多个翻译单元中。

答案 2 :(得分:1)

编译器是前所未有的(正式)不可预测的内联决策主。好的编译器将在文档中提供有关其实现行为的一些指导。代码越复杂,内联的可能性就越小,你可以找到一些关于维基百科上有什么/不倾向于内联的例子。

“做大量的工作”本身表明你的预期操作员太复杂,大多数编译器都没有内联。

Microsoft的Visual C ++编译器可以在生成警告时生成警告,当它决定内联一个没有内联标记的函数时,以及它没有内联标记为内联的函数。我喜欢它以感受可以内联的内容。