换句话说:就通过内存和/或速度(给定的理解力和可读性)的运行时性能而言,这两个代码块是相同的还是不同的?
A,接近首次使用时声明:
double A = /*...*/
double B = /*...*/
if(A > B) return false;
double C = /*...*/
double D = /*...*/
if(C < D) return false;
double E = /*...*/
double F = /*...*/
if(E > F) return false;
double G = /*...*/
double H = /*...*/
if(G < H) return false;
return true;
B、先声明所有变量:
double A = /*...*/
double B = /*...*/
double C = /*...*/
double D = /*...*/
double E = /*...*/
double F = /*...*/
double G = /*...*/
double H = /*...*/
if(A > B) return false;
if(C < D) return false;
if(E > F) return false;
if(G < H) return false;
return true;
最佳答案
对于现代编译器来说,这两种代码应该产生相同的目标代码。这些情况很容易根据基本的静态分析进行识别和优化,特别是 use-def analysis和 liveness analysis .
假设没有任何赋值涉及较早的变量,堆栈帧将只包含 2 个 double ,因为在任何时候只有 2 个 double 是活的。
当指针发挥作用时,由于潜在的别名,事情可能会发生巨大变化。如果使用不当,volatile
也会破坏优化。
关于c++ - 当将变量声明移动到接近首次使用时,它们是否在 return 语句之后有关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710789/