我有一个类,如A
包含一个类型的非平凡成员变量LargeType
:
class A {
public:
LargeType SetVariable(LargeType var){_var = var;}
LargeType GetVariable(){return _var;}
private:
LargeType _var;
};
Run Code Online (Sandbox Code Playgroud)
我遍历一个非常大的数据集,并在每次迭代中检索一个a
类型的对象A
.我发现以下代码(每次迭代至少发生一次):
//---- Version#1
LargeType var = a.GetVariable();
if(anotherLargeType == var){ DoSomething();}
DoOperation(var);
Run Code Online (Sandbox Code Playgroud)
运行速度比以下代码慢:
//---- Version#2
if(anotherLargeType == a1.GetVariable();){ DoSomething();}
DoOperation(a1.GetVariable());
Run Code Online (Sandbox Code Playgroud)
我可以理解为什么版本#1比版本#2运行得慢:每次迭代都会调用一个复制构造函数,因此需要做更多的工作.但是,我认为版本#1处理起来更好,而不是必须a1.GetVariable()
在一个循环中输入多次.有没有办法重写我的类,以便版本#1和版本#2的性能可比?
您应该返回对您的成员变量的引用.这样做,您不会浪费时间创建和/或复制临时工具:
class A {
public:
void SetVariable(const LargeType& var){_var = var;}
LargeType& GetVariable(){return _var;}
const LargeType& GetVariable() const {return _var;}
private:
LargeType _var;
};
Run Code Online (Sandbox Code Playgroud)
如你所见,我添加了一个const
版本GetVariable
; 这样就可以在类型const A
和对象上调用方法const A&
.
为避免创建不需要的副本,您还必须在调用代码中使用引用:
//---- Version#1
LargeType& var = a.GetVariable();
if(anotherLargeType == var){ DoSomething();}
DoOperation(var);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80 次 |
最近记录: |