C++ 第一次计算if,第二次加载if模式

C++ 第一次计算if,第二次加载if模式,c++,c++11,C++,C++11,我想问一下,使用这种模式是否是一种好的做法: 我有一个包含一些原始数据的类。我想从这些数据中总结一些信息,例如: class my_class{ public: int get_integers_sum(); private: std::vector<int> all_integers; }; class my\u class{ 公众: int get_integers_sum(); 私人: std::向量所有_整数; }; 假设所有的_整数都不会改变。这样做好吗

我想问一下,使用这种模式是否是一种好的做法:

我有一个包含一些原始数据的类。我想从这些数据中总结一些信息,例如:

class my_class{
public:
    int get_integers_sum();
private:
    std::vector<int> all_integers;
};
class my\u class{
公众:
int get_integers_sum();
私人:
std::向量所有_整数;
};
假设所有的_整数都不会改变。这样做好吗:

 class my_class{
    public:
        int get_integers_sum(){
            if(sum==-1){
                sum=sum=std::acculmate(all_integeres);// the proper code ofcourse
            }

            return sum; 
        }
    private:
        std::vector<int> all_integers;
        int sum=-1;
 };
class my\u class{
公众:
int get_integers_sum(){
如果(总和==-1){
sum=sum=std::acculmate(所有整数);//正确的代码
}
回报金额;
}
私人:
std::向量所有_整数;
整数和=-1;
};

当您知道输入不会改变时,这是一种有用的模式。这种方法的通用名称是。您的实现有点缺陷,因为
所有的\u整数之和实际上可能是-1。

测量它并找出答案;不要试图在没有测量的情况下进行优化。请记住,在现代CPU上,计算速度很快,而内存访问速度很慢,因此答案可能不是您所期望的


这是在您担心多线程安全地调用此代码之前。

据我所知,这种类型的缓存方法很好。当您知道get_integers_sum()经常被调用,但所有的_integers很少更改时,这基本上是有意义的。 但是您应该保持常量的正确性,这是使用可变的一种情况

class my_class{
public:
    int get_integers_sum() const { // <- adding const
        if(sum==-1){
            sum=std::acculmate(all_integeres);
        }

        return sum; 
    }
private:
    std::vector<int> all_integers;
    mutable int sum=-1; // <- adding mutable so it can be changed in const function
};
class my\u class{
公众:
int get_integers_sum()常量{//