第二章 头文件、变量和基本类型(7)——名字的作用域

来源:互联网 发布:淘宝店铺新品上架 编辑:程序博客网 时间:2024/05/29 11:06

0x01 什么是作用域?


作用域是程序的一部分,在其中名字有其特定的含义。同一个名字在不同的作用域中可能指向不同的实体。名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。

#include <iostream>using namespace std;int main(int argc, const char * argv[]){    int sum = 0;        for (int val = 1; val <= 10; ++val)        sum += val;        cout << "Sum of 1 to 10 inclusive is " << sum << endl;        return 0;}

1、上面这段程序定义了3个名字,main、sum和val,同时使用了命名空间名字std;

2、名字main定义在所有花括号之外,所以它有全局作用域,一旦声明之后,全局作用域内的名字在整个程序范围内均可使用;

3、名字sum定义在main函数所限定的作用域内,它拥有块作用域,从声明sum开始到main函数结束为止都可访问它,main函数外则不行;

4、名字val定义于for语句内,在for语句内可以访问它,但在main函数的其他部分不行。



0x02 作用域的嵌套


1、作用域可以彼此包含,被包含(被嵌套)的作用域称为内层作用域,相对应的就有外层作用域;

2、作用域中一旦声明了某个名字,它所嵌套着的所有作用域中都能访问该名字;

3、允许在内层作用域中重新定义外层作用域已有的名字,但最好不要这么做。


#include <iostream>using namespace std;int outside = 1;                                  //outside拥有是全局作用域int main(int argc, const char * argv[]){    int inside = 2;                               //inside拥有块作用域        cout << outside << " " << inside << endl;     //输出1 2        int outside = 0;                              //在内层作用域中重新声明并定义outside        cout << outside << " " << inside << endl;     //输出0 2    cout << ::outside << " " << inside << endl;   //使用::作用域运算符显式要求访问全局变量outside,输出1 2        return 0;}







-----------(我是分割线)-----------

        这里的学习顺序基于《 C++ Primer(第五版)》,虽说这本书是C++神书,但如果没有一定的C语言基础,肯定很难一下子啃下来,特别是原书第一章说编写一个简单的程序,结果各种语句和输入输出流都出现了,最后还来个类简介,实在是有点让新手朦逼。就算有一定的C++基础,中文版的语言也略显拗口。

        所以,我建议可以先用谭浩强的C/C++系列高校用书籍来打个基础。先别管网上对谭教授的教材评价如何,至少它能高效地带你入门。直接学习C++不是不可以,但毕竟c语言是一门经典的计算机语言,经久不衰,还衍生出了很多其他的计算机语言。学好C语言能培养出一种理解计算机语言的思维模式,以后学其他语言都可能事半功倍。

        我个人的学习方式是“先看懂,后深入,再高效”。在这里会按照我的理解,尽量用简单的语言来解释C++的知识点,至少先看懂并让程序能用再说。如果有错欢迎指正。

        文中可能有某些程序段来自pezy大神,自学C++的路上我有很多疑难都是在pezy大神的解释中顿悟。在此表示感谢!

        任何地方如有侵权请立即联系删除。

-----------(我是分割线)-----------








阅读全文
0 0