当前位置: 首页 > 知识库问答 >
问题:

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

章永安
2023-03-14

这里有两个相同的代码,唯一的区别是我在第一个代码中使用的是在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

我真的很困惑正在发生的事情,提前谢谢你。

共有1个答案

闻人业
2023-03-14

在循环中初始化字符串时,将在每次迭代中初始化该字符串。
换句话说,在每次迭代开始时,将该字符串设置为“******”,然后向其添加一些内容。

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

 类似资料:
  • 问题内容: 知道为什么for循环初始化程序中的此struct表达式在编译时会导致语法错误吗?在这种情况下,指向struct的指针工作正常,但是我需要像波纹管这样的局部变量。感谢您的建议! 问题答案: 简化您的代码: 给出编译时错误: 预期的布尔值或范围表达式,找到简单的语句(缺少复合文字周围的括号?)(以及另外1个错误) 该构造难以解析。不管是复合文字的一部分还是语句本身( 块)的开头括号,开头括

  • 我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:

  • 我试图在任意年份的经济衰退中计算复利。以下promise函数计算可变投资组合的发展。 编辑的清晰度: const是一个从1到20循环一年的数组(是静态的) 三元()在每次运行的不同年份触发,导致不同年份的

  • 问题内容: 我知道对于上面的第3个初始化,字符串对象在字符串池中初始化,而第4个与字符串池无关。 1.和2有 什么区别?如果我将其视为指针变量,它存储的是特定内存地址,而该内存地址从未被JVM或OS使用? 4.和5 之间有区别吗? 当我打印和通过直接和,对,我甚至无法通过compilation.For ,编译OK,我得到“空”,并在控制台窗口中的输出。为什么? @aioobe的答案后编辑:更多问题

  • 在我的应用程序中,一切正常,但我想提高性能并优化我的代码。 这两个哪个更适合 1.initialisation 2.连接

  • 考虑以下初始化: 在g 5.2.0中,编译器对falseString发出警告,而对trueString发出错误。 使用clang 3.6-std=c 11时,编译器会对假字符串和真字符串抛出错误。 Q1)为什么的行为不同,即使两个初始化值是相同的类型()? Q2)哪个编译器是正确的,为什么?标准怎么说? 编辑: 错误:从“bool”到“std::string”(又名“basic\u string”