第一个样本与第二个样本是否有任何性能损失,为什么?
// 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);
}
答案 0 :(得分:2)
在循环中创建变量是一个好习惯,以确保它们的范围仅限于该循环。此外,重要的是声明尽可能使用接近它们的变量。
这是另一篇文章,其中包含更多相关信息:
Declaring variables inside loops, good practice or bad practice?
答案 1 :(得分:1)
一般来说,如果不是普通的旧数据,那么每次循环迭代运行对象的构造函数/解构函数会产生开销。在string的情况下:分配和释放str的内部缓冲区。如果findStr和processStr都具有高性能,这只会影响性能。