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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值