在循环体内声明变量有什么缺点吗?

Dun*_*eal 3 c++ c++11

假设我们有一个迭代多次的循环:

for (int i=0; i < 1000000; ++i) {
  int s = 100;
  s += i;
  cout << s;
}
Run Code Online (Sandbox Code Playgroud)

我们只s在循环体内部使用,所以理想情况下我们想在那里声明它所以它不会污染封闭的命名空间.

我想知道这是否有任何不利之处.例如,它是否会产生性能成本,因为程序会s在每次迭代时重新声明?

Que*_*tin 7

从概念上讲,每次迭代都会构造和销毁变量.

但它会影响性能吗?那么,你可以在这里查看你的情况.int在第7行删除以在loop-local和function-local变量之间切换.
结论:没有任何区别.装配是一样的!

所以,只需使用代码中有意义的东西.如果每次迭代需要一个对象,则每个对象生成一个对象.优化器比您想象的更聪明.如果这还不够,你会回过头来分析数据并仔细调整,而不是广泛的指导方针.