赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
写C++离不开一个重要的概念那就是作用域,作用域是C++语言非常重要的一个概念,接下来我们就一起看看C++的作用域。
C++ 中的作用域(scope)指的是变量、函数或其他标识符的可见和可访问的范围。
C++有5种作用域,具体详见下面。
除非名字定义在一个语言结构中(比如,一个类或函数),否则就是全局作用域。其实,全局作用域概念应该放在最下面更容易理解,只要不是其它4种作用域就是全局作用域,这下通俗易懂了吧!
示例:
#include <iostream>
int a = 0;
int main(){
}
上面的变量a所在的作用域就是全局作用域。
定义在名字空间中的名字,且不在某个语言结构中(比如,一个类或函数),就是名字空间作用域。这里特别注意下不在某个语言结构中这句话,如果在呢?那就是别的作用域了!
示例:
#include <iostream>
namespace WebCore {
int a = 0;
}
int main() {
std::cout << "Hello, World!" << std::endl;
std::cout << "a: "<<WebCore::a<< std::endl;
return 0;
}
上面的a所在的作用域就是名字空间作用域。
如果名字在一个函数内声明(包括函数的参数),则它的作用域就是局部作用域。这里需要特别注意的是函数自己的参数也是局部作用域,和内部定义的名字一样。
示例:
#include <iostream>
void test(int a) {
int b = 0;
}
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
上面的函数test里面的a和b所在的作用域都是局部作用域。
如果名字是类的一个成员,则它的作用域是为类作用域。这个应该接触的太多了,类里面定义的成员字段和成员函数都是类作用域。
示例:
#include <iostream>
class Demo {
private:
int a;
public:
void print() {}
};
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
类Demo的私有成员a和公有成员print都是类作用域,只不过print这个名字可能不是好名字,大家不要这么命名。
名字声明在一个for、while、switch或if语句中的作用域就是语句作用域。
示例:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
if (true){
int a = 0;
}
return 0;
}
这句写的很low,if语句必然执行,当然这只是演示,不要太较真。a的作用域就是语句作用域,我们的目的达到了。
接着上面的说,如果一个名字即在名字空间中,又在函数中,又在语句中,它属于哪种作用域?
示例:
#include <iostream> int a;//全局作用域 namespace WebCore { class Demo { private: int a;//类作用域 public: void print() {}//类作用域 }; int a = 0;//名字空间作用域 void test(int a) {//局部作用域 int b = a;//局部作用域 if (a) { int a = 0;//语句作用域 } } } int main() { std::cout << "Hello, World!" << std::endl; return 0; }
定义了一堆的a,这或许不是好的命名方式,但是一个好的演示方式。
1、学好C++作用域必须理解透彻,这样才能用好!
2、C++比C多了两个作用域:名字空间作用域和类作用域
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。