用吸气剂瞬间替代局部变量?

时间:2017-02-04 14:36:22

标签: c++ performance getter

考虑这种情况:

class Test {
public:
    Test() : _var{5} {}
    inline int getVar() {
        return _var;
    }
private:
    int _var;
}

void func(Test& t) {
    int var = t.getVar();
    int a = 1 + var;
    int b = 2 + var;
    ...
    int z = 26 + var;
}

int main() {
    Test t;
    for (int i = 0; i < 1000000; ++i) {
         func(t);
    }
}

虽然在40年代期间对类似的执行进行了分析,但我发现单独的getVar()调用花费了大约0.8秒,这对于访问int来说似乎很大。

但是,通过将我的_var设置为public并直接访问它(t._var)而不是使用局部变量和Test的getter,它甚至更慢。

是否有一个神奇的c ++解决方案几乎可以即时访问“_var”?

1 个答案:

答案 0 :(得分:-1)

在类定义中定义的方法始终是内联。请注意, inline 并不一定意味着对该方法的调用将替换为方法正文,并且具有look

您的时间测量很可能是错误的,或者您没有进行优化,编译器也没有优化它的地狱。