假设我有这门课
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];
};
我这样做:
Point myPoint;
myPoint[0] = 5;
// unrelated code goes here
float myVal = myPoint.x() + 5;
请问GCC上
-O2
或 -O3
优化掉对 x()
的任何调用刚刚获得 v[0]
? IE:float myVal = myPoint.v[0] + 5;
或者有什么理由说明这是不可能的?
更新:应该提到我确实意识到
inline
对编译器的建议比其他任何东西都重要,但无论如何都想知道。作为一个附加问题,对此类进行模板化是否会对可以进行的优化产生任何影响?
最佳答案
Will GCC optimize away an inline accessor?
所有优化编译器都会这样做。与其他优化相比,这是一个微不足道的优化。
Or is there a reason why this is impossible?
没有任何理由使它不可能,但也没有保证。
As an additional question, will templating this class have any effect on the optimizations that can be done?
不是。但是,当然,编译器可能有不同的模板内联阈值。
关于c++ - GCC 会优化掉内联访问器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066017/