C++ 将对象字段的值放入变量中的性能

C++ 将对象字段的值放入变量中的性能,c++,class,object,field,C++,Class,Object,Field,以下是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 = obje

以下是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
与其定义一些包含对象字段值的int,我是否应该直接使用object1.rows以及其他行

除此之外,我认为在一个位置更改int的值更容易,起初我认为将值放在int中比每次访问字段更有效。现在,我很不确定roes和cols的情况是否如此

另一方面,对于object.size,由于它是一个函数,并且值不太可能经常更改,因此计算一次并在程序的其余部分使用int而不是每次计算是否安全?好的,在这种情况下,我可以在我的类中创建一个字段size=rows*cols,但这只是一个简单的示例


那么,您对此有何想法?

最好按照您所展示的方式来做,使用临时变量来提高可读性并简化键入。这是一种非常常见的情况,编译器将为您进行优化。

由于object1是一个局部变量,因此堆栈上已为object1.rows和object1.cols保留了空间;在堆栈上创建更多的变量来保存相同的值不会带来性能方面的好处,而且可能会根据具体情况导致性能下降

无论哪种情况,性能差异都可以忽略不计。然而,我会避免仅仅因为清洁度和风格而创建额外的局部变量


在object1.size情况下,如果多次使用objectsize的值,您可能会看到性能提高。如果只运行这些计算几次,那么性能差异也可以忽略不计。如果编译器可以看到size的实现,并且声明为const,那么它很可能会优化掉对size的多次调用

啊编译器优化。。。忘了吧!谢谢好的,从两个答案中我了解到,在正常情况下,性能不应该是一个真正的问题。我会认为这是一种编码风格的偏好。现在我并没有做过多的事情,但它很快就会改变,所以我想我每次都要考虑我正在做的操作类型。@Doombot这是正确的。除非这段代码是性能关键型的,并且是重复运行的,否则您会幸运地注意到,您所提供的所有样式选项之间的执行时间甚至相差1纳秒。@Doombot我应该补充一点,通常您应该为人类而不是计算机编写代码。源代码是您的同事将阅读和维护的内容。过早优化是一件坏事;如果发现某个东西是一个瓶颈,那么您可以在对程序进行概要分析后返回到它。1让它工作2让它工作正确3让它工作迅速