【C++】变量(五) 变量名的作用域以及变量定义的一些习惯

来源:互联网 发布:梦幻西游mac版更新 编辑:程序博客网 时间:2024/05/16 15:10

我们已经了解了变量的命名和定义,其实,在C++程序中每一个名字都有其相对应的特定实体(例如作为一个变量、函数或者类型等等)。不过,虽然有这样一个要求,同一个名字还是可以在程序中不止一次使用的:同一个名字可以通过区别其不同的意义,在不同的语境中反复使用。这种区别名字不同意义的语境称为作用域。作用域是程序中划分的作用范围,同一个名字可以在不同的作用域中拥有相对应的实体。

 在C++程序中,大部分的作用域是以大括号为界限的。通常情况下,一个名字在它声明之初到它最后一次出现都是有作用的。例如:

#include <iostream>int main(){    int sum=0;    for (int val=1; val<=10; ++val)    sum+=val;    std::cout<< "Sum of 1 to 10 inclusive is "<< sum<< std::endl;    return 0;}

 在这段程序中定义了三个名字,main是函数名,sum和val是变量名。main是在大括号外定义的,它在整个程序中都起作用,这种在函数外定义的名字拥有全局作用域(global scope);sum是在main函数内定义的,他在整个函数中都起作用,在函数体外则不,我们称为局部作用域(local scope);变量val则是在for循环语句中定义的,它只能在这个语句中起作用,称作语句作用域(statement scope)。

—————————————————————————————————————————————————

C++中名字的嵌套

在全局作用域中定义的名字可以在局部作用域中使用,局部作用域中定义的名字可以在语句作用域中使用,等等···同一个名字也可以再内部的作用域中重新定义,要想知道一个名字到底代表什么意思,必须要展开这个名字作用的整个作用域。例如:

#include <iostream>#include <string>std::string s1="hello"; //s1 has global scopeint main (){    std::string s2="world"; //s2 has local scope    std::cout<< s1<< " "<< s2<< std::endl; //uses global s1; prints "hello world"    int s1=42; //s1 is local and hides global s1    std::cout<< s1<< " "<< s2<<std::endl; //uses local s1; prints "42 world"    return 0;}

 这段程序中定义了三个变量:一个全局string变量s1,一个局部string变量s2和一个局部string变量s1,后来定义的s1把全局的s1给覆盖掉了。程序最后的结果是,第一行显示“hello world”,第二行显示“42 world”。

除了全局作用域、局部作用域和语句作用域外,我们还会接触到类作用域(class scope)和命名空间作用域(namespcae scope)。

—————————————————————————————————————————————————

变量定义的一些习惯

 通常情况下,变量的声明或者定义是可以在程序的任意一个允许的语句中进行(变量在使用前必须先声明或者定义)。但是,由于作用域的关系,如果我们任意的定义变量,会引起不必要的阅读障碍。那么,如果我们在使用变量的时候,先定义它,那么很多时候就能避免这种情况的发生。

0 0
原创粉丝点击