在下面的代码中:

class Base
{
   void funcA();
   void funcB();
   .
   .
};

class Derv : public Base
{
   int m_state;
   void funcA(){ m_state = 1; Base::funcA(); }
   void funcB(){ m_state = 4; Base::funcB(); }
   .
   .
};

Derv a;
a.funcA();
Base::funcA()是单独的函数调用(Derv::FuncA() -> Base:FuncA()),还是将代码内联?
如果它依赖于编译器,那么编译器(例如GCC)是否足够聪明以内联它?

最佳答案

它取决于Base::funcA()Base::funcB()的实现。
如果编译器可以,则编译器将对其进行内联。
大多数现代编译器(包括gcc)都足够聪明。

C++标准允许编译器执行任何优化,只要生成的可执行文件表现出与相同的可观察行为,就好像满足了该标准的所有要求一样。

这称为假设规则

09-04 17:02