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()常量{//