以下是c ++中的两个代码段:
some_previously_defined_array_object_class object1;
int nrows = object1.rows;
int ncols = object1.cols;
int objectsize = object1.size();
int some_metric1;
int some_metirc2;
some_metric1 = nrows*ncols+2/(3+ncols);
some_metric2 = objectsize+0.5*ncols;
// Other computations involving the previous int
我应该直接使用object1.rows(还有其他的吗?)
而不是定义一些包含我对象字段值的int。除了我认为在一个地方更改int的值更容易之外,起初我认为将值放在int中而不是每次都访问字段会更有效。现在,我完全不确定这是roes和cols的情况。
另一方面,对于" object.size()",因为它是一个函数并且该值不太可能经常改变,所以计算它并使用它是一个安全的赌注每个程序的其余部分的int而不是每次计算?好的,在这种情况下,我可以创建一个字段" size = rows * cols"在我的班上,但这只是一个简单的例子。
那么,对此有何想法?
答案 0 :(得分:0)
最好以您展示的方式进行,使用临时变量来提高可读性并简化输入。这是一种非常常见的情况,编译器会为您优化它。
答案 1 :(得分:0)
由于object1
是一个局部变量,因此堆栈上已经为object1.rows
和object1.cols
保留了空间;在堆栈上创建更多变量以保持相同的值不会带来任何性能优势,并且可能确实会导致性能惩罚,具体取决于具体情况。
在任何一种情况下,性能差异都可以忽略不计。但是,我会避免仅仅因为清洁和风格而创建额外的局部变量。
在object1.size()
案例中,如果您多次使用objectsize
的值,则可能会看到性能提升。如果您只运行这些计算几次,那么性能差异将可以忽略不计。 (如果编译器可以看到size()
的实现并且它被声明为const
,那么无论如何它都可以优化掉size()
的多个调用!)