局部变量的循环性能

时间:2014-11-11 13:18:37

标签: c++ performance c++03 variable-initialization

第一个样本与第二个样本是否有任何性能损失,为什么?

// 1. variable is declared inside the loop body
while(isSomethingTrue == true) {
  std::string str;
  findStr(str); // str initialization
  processStr(str); // processStr does not change its argument
}

// 2. variable is declared outside the loop body
std::string str;
while(isSomethingTrue == true) {
  findStr(str);
  processStr(str);
}

2 个答案:

答案 0 :(得分:2)

在循环中创建变量是一个好习惯,以确保它们的范围仅限于该循环。此外,重要的是声明尽可能使用接近它们的变量。

这是另一篇文章,其中包含更多相关信息:

Declaring variables inside loops, good practice or bad practice?

答案 1 :(得分:1)

一般来说,如果不是普通的旧数据,那么每次循环迭代运行对象的构造函数/解构函数会产生开销。在string的情况下:分配和释放str的内部缓冲区。如果findStr和processStr都具有高性能,这只会影响性能。