【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)。
—————————————————————————————————————————————————
变量定义的一些习惯
通常情况下,变量的声明或者定义是可以在程序的任意一个允许的语句中进行(变量在使用前必须先声明或者定义)。但是,由于作用域的关系,如果我们任意的定义变量,会引起不必要的阅读障碍。那么,如果我们在使用变量的时候,先定义它,那么很多时候就能避免这种情况的发生。
- 【C++】变量(五) 变量名的作用域以及变量定义的一些习惯
- 【c#】变量的作用域
- 变量名的一些规则
- php变量的定义和作用域
- JAVA 定义变量的作用域
- $(function(){})中定义变量的作用域
- 汉字定义的变量名,类名
- 五、Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
- perl变量作用域以及定义方式。
- JavaScript的定义与执行以及变量作用域概念(2011/7/14)
- 变量定义域以及嵌套的作用域
- php变量作用域的一些问题
- js变量作用域的一些例子
- The New C++ -- 变量 (6. 变量名的声明点和作用域)
- 【C++】变量(二) 变量的命名与定义
- 【C++】变量(四) 变量的声明和定义
- 【JavaScript】(5)匿名函数的定义方式、变量的作用域(局部变量,全局变量)
- 变量的作用域
- Linux vmstat命令实战详解
- 微信密码破解。如何查询已删除的微信聊天记录?
- Web_分享按钮;
- iOS中alloc与init
- URAL 1036. Lucky Tickets(dp+大数)
- 【C++】变量(五) 变量名的作用域以及变量定义的一些习惯
- Mysql数据库设计
- unity3d 延迟执行脚本语句
- 微信iOS终端SDK新手使用指南
- 改变世界的六本书
- sniffer
- Common Subsequence
- 九度 题目1356:孩子们的游戏(圆圈中最后剩下的数)
- C++ 异常