GCC 会优化掉内联访问器吗?

Tyl*_*erg 3 c++ optimization gcc accessor c++11

假设我有这门课

class Point 
{
  inline float x() const { return v[0]; }
  inline float y() const { return v[1]; }
  inline float z() const { return v[2]; }

  float v[3];
};
Run Code Online (Sandbox Code Playgroud)

我这样做:

Point myPoint;
myPoint[0] = 5;

// unrelated code goes here

float myVal = myPoint.x() + 5;
Run Code Online (Sandbox Code Playgroud)

将上的GCC-O2-O3优化掉任何调用x()与刚开v[0]?IE:

float myVal = myPoint.v[0] + 5;
Run Code Online (Sandbox Code Playgroud)

或者有什么理由说明这是不可能的?

更新:应该提到我确实意识到inline对编译器的建议比其他任何事情都重要,但无论如何都想知道。

作为一个附加问题,对此类进行模板化是否会对可以进行的优化产生任何影响?

Aco*_*orn 6

GCC 会优化掉内联访问器吗?

所有优化编译器都会这样做。与其他优化相比,这是一个微不足道的优化。

或者有什么理由说明这是不可能的?

没有理由使它不可能,但也没有保证。

作为一个附加问题,对此类进行模板化是否会对可以进行的优化产生任何影响?

不是。但是,当然,编译器可能有不同的模板内联阈值。