在下面的代码中:
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++标准允许编译器执行任何优化,只要生成的可执行文件表现出与相同的可观察行为,就好像满足了该标准的所有要求一样。
这称为假设规则。