代码之家  ›  专栏  ›  技术社区  ›  tocrafty

当调用类内联函数时,编译器真正做什么?

  •  -2
  • tocrafty  · 技术社区  · 7 年前

    this 指针。所以这些内联函数在类外调用时不会被编译器替换,对吗?这似乎表明类内联函数的使用非常有限!

    2 回复  |  直到 7 年前
        1
  •  2
  •   Basile Starynkevitch    7 年前

    优化编译器可以 inline

    和链接 一个完整的程序 g++ -flto -O2 optimization option 属于 GCC ...).

    g++-flto-O2 将显著减缓您的构建过程;基本上,所有内容都被编译了几乎“两次”,一次在“编译”时,一次在“链接”时,GIMPLE表示得到了重新优化)

    你会惊讶于什么函数调用被内联(很多函数调用可能是内联的)。它与静态或非标记函数无关 inline .

    所以你不应该 照顾 关于内联(这是一个实现和优化细节),但是您 编译器会做得很好。

    g++ 您想禁用most内联以简化调试 gdb with g++ -fno-inline -Wall -Wextra -O0 -g )

    你错了, this 只是一个 含蓄的 参数(另请参见 that )当然,编译器通常是对成员函数的内联调用。在里面 实践 setters -很短很快)。

    规格

    如果您关心编译器真正做什么(您不应该关心,但需要避免 undefined behavior 通用条款 g++ -O2 -fverbose-asm -S 获得 foo.s foo.cc 翻译单位。

        2
  •  2
  •   Maxim Egorushkin    7 年前

    e.g. functions using alloca or vararg functions ,其定义不可用的函数),但成员函数不阻止内联。