Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在for循环中定义的变量只存在于其内部? 我是用Stanley B. Lippman阅读C++底漆,在流控制部分,给出了一个循环的例子: #include <iostream> int main(void){ int sum=0; for (int val=1; val <= 10; val++) sum +=val; std::cout << sum << std::endl; return 0; } #包括 内部主(空){ 整数和=0; 对于(int val=1;val_C++_C++11_For Loop - Fatal编程技术网

为什么在for循环中定义的变量只存在于其内部? 我是用Stanley B. Lippman阅读C++底漆,在流控制部分,给出了一个循环的例子: #include <iostream> int main(void){ int sum=0; for (int val=1; val <= 10; val++) sum +=val; std::cout << sum << std::endl; return 0; } #包括 内部主(空){ 整数和=0; 对于(int val=1;val

为什么在for循环中定义的变量只存在于其内部? 我是用Stanley B. Lippman阅读C++底漆,在流控制部分,给出了一个循环的例子: #include <iostream> int main(void){ int sum=0; for (int val=1; val <= 10; val++) sum +=val; std::cout << sum << std::endl; return 0; } #包括 内部主(空){ 整数和=0; 对于(int val=1;val,c++,c++11,for-loop,C++,C++11,For Loop,,每个变量都有作用域,粗略地说就是它的生存期 在for循环的头部声明的变量的作用域仅限于for循环。当控制从循环中传出时,变量就从作用域中传出。当控制从函数中传出时,函数中声明的变量也会发生同样的情况。运行此精确代码不会出现任何错误或者我。我得到的sum值为55,val值为11,正如预期的那样。因为您在for循环之外定义了val,但在main中,它在main()中的任何地方都应该是好的一般来说,如果你在两个花键之间声明一个变量而没有任何花哨的关键字,它应该在这两个大括号内保持有效(对于代码块是“

,每个变量都有作用域,粗略地说就是它的生存期


for
循环的
头部声明的变量的作用域仅限于
for
循环。当控制从循环中传出时,变量就从作用域中传出。当控制从函数中传出时,函数中声明的变量也会发生同样的情况。

运行此精确代码不会出现任何错误或者我。我得到的sum值为55,val值为11,正如预期的那样。因为您在for循环之外定义了val,但在main中,它在main()中的任何地方都应该是好的一般来说,如果你在两个花键之间声明一个变量而没有任何花哨的关键字,它应该在这两个大括号内保持有效(对于代码块是“局部的”)。我不是C++的Gru,所以可能有例外(我也不确定是否如果)。语句被视为代码块,其局部定义的变量仅在语句中工作。

它是经过深思熟虑的。每当您在这里引入块
{/*stuff*/}(和其他一些地方)时,块中的变量都是块的局部变量,并取代(隐藏)在块外部定义的同名变量。它有助于确保块本地代码不会影响其他变量。在编辑旧代码库时,这可能很有用,并且您不希望意外使用范围更广的变量。

这背后的概念称为变量范围。每当创建变量时,内存位置都是一个变量因此,为了优化内存使用,定义了变量的作用域

在第一种情况下,变量仅限于for循环。变量在循环开始时在内部创建,在循环内部使用,在循环执行结束时销毁

在第二种情况下,变量是在循环之外创建的,因此它会一直持续到程序执行,因此即使在循环之后也可以访问它

for循环内部声明的变量是局部变量的示例,外部声明的变量是全局变量的示例。 不仅在循环中,局部变量还将在if..else块、函数中使用,并且它们的使用仅限于范围内

希望这能回答你的问题

考虑到我们在main中使用的函数的for循环,它是否与局部变量有关

与函数无关;获取作用域的方法还有很多,包括块:

int main()
{
    {
       int x = 0;
    }
    std::cout << x; // error
}
intmain()
{
{
int x=0;
}

std::cout因为它打开了一个新的作用域,就像
{
一样。你可以阅读更多关于作用域的内容。@JonathanPotter谢谢你,这将非常有用。只需运行这两个代码片段(第二个代码片段需要初始化val)也可以清楚地显示发生了什么:)哦,这对我解释了很多,所以就像我说的,就像函数中的局部变量一样?@gm_fernandes:for
循环的
不是一个函数,但是其中声明的变量的作用域是有限的,是的。@gm_fernandes是的,这相当于总结了行为。想象一下,如果(某物){int x=123;}cout@Beta现在我完全理解了它,但当然我会阅读更多关于scope的内容,谢谢你的帮助!谢谢你的建议和解释,现在对我来说已经非常清楚了!“我会将此作为评论发表,但我没有足够的声誉这样做”那是因为你应该在评论之前观察和学习。在错误的地方写评论与你应该做的相反!永远不要理解为什么人们会随便做错误的事情来“变通”他清楚地解释了这样的限制,特别是当他们知道为什么限制时!!这有点苛刻。他毕竟回答了这个问题。
int main()
{
    {
       int x = 0;
    }
    std::cout << x; // error
}