在 for 循环外和在 for 循环内初始化字符串有什么区别?

问题描述

我这里有两个代码是相同的,唯一的区别是我在第一个代码中使用了在 for 循环内初始化的字符串,另一方面,我使用的是在 for 循环外初始化的字符串,但仍然可以不同的答案

在 for 循环内初始化的字符串:

#include <iostream>
#include <string>
using namespace std;
int main() {
    for (int i = 0; i < 10; i++) {
        string  TheString = "******";
        
        if (i < 3 || i > 6)
            TheString+= "     ";
        else {
            TheString += "aaaaa";
        }
        cout << TheString << endl;
    }
    return 0;
}

输出是这个形状:

******     
******     
******     
******aaaaa
******aaaaa
******aaaaa
******aaaaa
******     
******     
******     

在for循环外初始化的字符串:

#include <iostream>
#include <string>
using namespace std;
int main() {
    string  TheString = "******";
    
    for (int i = 0; i < 10; i++) {
        if (i < 3 || i > 6)
            TheString+= "     ";
        else {
            TheString += "aaaaa";
        }
        cout << TheString << endl;
    }   
    return 0;
} 

输出是这个形状:

******     
******          
******               
******               aaaaa
******               aaaaaaaaaa
******               aaaaaaaaaaaaaaa
******               aaaaaaaaaaaaaaaaaaaa
******               aaaaaaaaaaaaaaaaaaaa
******               aaaaaaaaaaaaaaaaaaaa
******               aaaaaaaaaaaaaaaaaaaa

我对正在发生的事情感到非常困惑,在此先感谢您。

解决方法

当你在循环内部初始化字符串时,字符串在每次迭代中都会被初始化。
换句话说,字符串在每次迭代开始时设置为 "******",然后添加一些内容。

另一方面,当你在循环外初始化字符串时,字符串只在循环之前初始化一次。
换句话说,字符串在进入循环之前被设置为 "******" 一次,并且在第二次或以后的迭代中对新字符串进行字符串的添加。