下面的部分是建立在第14亿,在局部范围内一看。
当讨论变量时,将范围和持续时间的概念分离出来是很有用的。变量的范围决定了一个变量是可访问的。一个变量的持续时间决定创建和销毁它的地方。这两个概念往往是联系在一起的。
块内部定义的变量称为局部变量。局部变量具有自动持续时间,这意味着它们在定义的时候被创建(并且可能被初始化),并且当它们被定义的块退出时被破坏了。局部变量有块作用域(也称为局部作用域),这意味着它们在声明点的范围内输入范围,并且在它们被定义的块的结束时离开范围。
通过限制变量的范围,减少了程序的复杂性,因为活动变量的数量减少了。此外,它使它更容易看到变量被使用。在一个块内定义的变量只能在该块(或嵌套的子块)中使用。这可以使程序更容易理解。
规则:在最小范围内定义变量。
规则:避免使用与外部块中的变量相同的名称嵌套变量。
功能参数
虽然函数参数不是在属于函数的块内定义的,在大多数情况下,它们可以被认为是有块范围。
当讨论变量时,将范围和持续时间的概念分离出来是很有用的。变量的范围决定了一个变量是可访问的。一个变量的持续时间决定创建和销毁它的地方。这两个概念往往是联系在一起的。
块内部定义的变量称为局部变量。局部变量具有自动持续时间,这意味着它们在定义的时候被创建(并且可能被初始化),并且当它们被定义的块退出时被破坏了。局部变量有块作用域(也称为局部作用域),这意味着它们在声明点的范围内输入范围,并且在它们被定义的块的结束时离开范围。
考虑这个简单的函数:
1
2
3
4
5
6
7
8
9
10
11
12
int main() // outer block
{
int n(5); // n created and initialized here
{ // begin nested block
double d(4.0); // d created and initialized here
} // d goes out of scope and is destroyed here
// d can not be used here because it was already destroyed!
return 0;
} // n goes out of scope and is destroyed here
通过限制变量的范围,减少了程序的复杂性,因为活动变量的数量减少了。此外,它使它更容易看到变量被使用。在一个块内定义的变量只能在该块(或嵌套的子块)中使用。这可以使程序更容易理解。
规则:在最小范围内定义变量。
规则:避免使用与外部块中的变量相同的名称嵌套变量。
功能参数
虽然函数参数不是在属于函数的块内定义的,在大多数情况下,它们可以被认为是有块范围。
1
2
3
4
5
6
int max(int x, int y) // x and y defined here
{
// assign the greater of x or y to max
int max = (x > y) ? x : y; // max defined here
return max;
} // x, y, and max all die here