代码之家  ›  专栏  ›  技术社区  ›  Nick Strupat

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

  •  1
  • Nick Strupat  · 技术社区  · 14 年前

    运算符是否总是内联的?

    struct foo {
        void operator ()() {
            // Do tons of work.
        }
    };
    
    int main() {
        foo f;
        f();
    }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Benoît photo_tom    14 年前

    编译器是前所未有的(官方的)不可预测的内联决策之王。优秀的编译器将在文档中提供有关其实现行为的一些指导。代码越复杂,内联的可能性就越小,您可以在维基百科上找到一些可以/不可以内联的例子。

    它本身的“做大量的工作”表明您想要的操作符对于大多数编译器来说过于复杂,无法内联。

    微软的VisualC++编译器可以生成警告,当它决定将未标记为内联的函数内联,而不在内联标记为内联的函数时生成警告。我喜欢这种感觉 可以 内联。

        2
  •  2
  •   IanH    14 年前

    运算符和其他任何函数一样都是正常函数。

        3
  •  1
  •   anon    14 年前

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