初始化另一个变量或反复使用原始变量

Initialize another variable or use the original over and over

本文关键字:变量 原始 另一个 初始化      更新时间:2023-10-16

在这个程序的制作过程中,我经常遇到这种情况,我觉得最好问问你们。

例如,如果我有一个循环调用向量的特定结构,那么像这样反复调用向量更好吗:

FP_list[n].callsign=...
FP_list[n].de_airport=...
FP_list[n].ar_airport=...;
FP_list[n].aircraft_type=...
FP_list[n].trueairspeed=...
FP_list[n].FL_route.push_back(Aircraft.GetClearedAltitude());
FP_list[n].last_WP=...
FP_list[n].next_WP=...

或者声明一个临时变量并从那时起使用它,如下所示:

FP temp=FP_list[n];
temp.callsign=...
...
temp.next_WP=...

在内存消耗和运行时间方面,哪一个更好?

提前感谢

如果FP_liststd::vector或类似的,您可以执行:

FP& p = FP_list[n];
 ^^^ use a reference
p.callsign = ...;
p.de_airport = ...;
p.ar_airport = ...;

此代码使用引用来访问数据。引用使您可以直接访问它所引用的元素。它的工作原理有点像指针。现在您只需要调用operator[]一次,并且您的代码更加紧凑。

如注释中所述,请注意,如果对向量本身进行更改,例如添加或删除元素,则引用可能会无效。

这假设您实际上想要更改存储在矢量中的内容。如果您不想更改它们,则必须创建一个副本:FP p = FP_list[n];

效率是一种权衡。你编写代码的方式就是复制结构。根据制作该副本的成本,它可能比评估索引表达式的额外时间差得多。

我的结论是:尽可能干净地编写代码,以便清楚地了解它在做什么,然后让编译器中的优化器担心效率。如果性能确实成了一个问题,那么先分析一下,这样你就可以确保你正在手动优化正确的问题。