c ++变量声明

swa*_*wan 5 c++

我想知道这段代码:

int main(){
    int p;
    for(int i = 0; i < 10; i++){
      p = ...;
    }
    return 0
}
Run Code Online (Sandbox Code Playgroud)

与那一个完全一样

int main(){
    for(int i = 0; i < 10; i++){
      int p = ...;
    }
    return 0
}
Run Code Online (Sandbox Code Playgroud)

在效率方面?我的意思是,在第二个例子中,p变量将被重建10次?

Joh*_*itb 9

  • 在效率方面也是如此.
  • 在可读性方面不一样.第二个在这方面更好,不是吗?

这是代码保持隐藏的语义差异,因为它没有对int产生影响,但它对人类读者产生了影响.你想携带你在...循环外做的任何计算的值吗?你不这样做,所以你应该编写反映你意图的代码.

一个人类读者需要寻求这个功能,并寻找其他用途,p以确认自己所做的只是过早的"优化"而没有任何更深层的目的.

假设它对您使用的类型有所不同,您可以通过注释代码来帮助人类读者

/* p is only used inside the for-loop, to keep it from reallocating */
std::vector<int> p;
p.reserve(10);

for(int i = 0; i < 10; i++){
  p.clear();
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)