为什么在for循环中定义的变量只存在于其中?

时间:2015-08-13 23:10:34

标签: c++ c++11 for-loop

我正在阅读Stanley B. Lippman撰写的C ++ Primer,在流程控制部分,它显示了像这样的for循环的一个例子:

#include <iostream>

int main(void){
    int sum=0;
    for (int val=1; val <= 10; val++)
        sum +=val;
    std::cout << sum << std::endl; 
    return 0;

}

如果我在for循环之外尝试std::cout << val;,IDE会给我一个错误。但我想了解它为什么会发生以及它与这段代码的不同之处:

#include <iostream>

int main(void){
    int sum=0;
    int val;
    for ( val=1; val <= 10; val++)
        sum +=val;
    std::cout << sum << std::endl;
    std::cout << val; 
    return 0;

}

我可以在没有任何问题的情况下实际打印val值。

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

4 个答案:

答案 0 :(得分:8)

每个变量都有范围,这是(松散地说)它的生命周期。

for循环的头部声明的变量的范围仅限于for循环。当控制传出循环时,变量超出范围。当控件传递出函数时,函数中声明的变量完全相同。

答案 1 :(得分:3)

  

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

与功能无关;还有很多其他方法可以获得范围,包括一个块:

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

for循环是另一个例子。

答案 2 :(得分:1)

故意。它被称为scope,每当你引入一个块{ /*stuff here */ }(以及其他一些地方)时,块内的变量都是块的本地变量,并取代(隐藏)在块外定义的同名变量。它有助于确保块本地代码不会遇到其他变量。在编辑旧代码库时非常有用,并且您不希望意外地使用更宽范围的变量。

答案 3 :(得分:0)

这背后的概念称为变量范围。每当创建变量时,都会为其分配一个内存位置。所以为了优化内存使用范围,定义了变量。

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

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

在for循环中声明的变量是局部变量的一个例子,而在外面声明的变量是全局变量的一个例子。 不仅有循环,局部变量也将用于if..else块,函数及其用法仅限于范围内。

希望这能回答你的问题。