C++ 作用域及命名空間
發(fā)布時(shí)間:2023-12-05 13:39:15
變量?jī)H在創(chuàng)建區(qū)域內(nèi)可用。這稱為作用域(scope)。本主主要介紹一下C++中的作用域(scope)及命名空間。
1、局部變量
定義在函數(shù)內(nèi)部的變量稱為局部變量(Local Variable),它的作用域僅限于函數(shù)內(nèi)部, 離開該函數(shù)后就是無效的,再使用就會(huì)報(bào)錯(cuò)。
例如,
#include <iostream>
using namespace std;
int fn(int a){
int b,c; //a,b,c僅在函數(shù)fn()內(nèi)有效
return a+b+c;
}
int main(){
int m,n; //m,n僅在函數(shù)main()內(nèi)有效
return 0;
}
2、全局變量
在所有函數(shù)外部定義的變量稱為全局變量(Global Variable),它的作用域默認(rèn)是整個(gè)程序,也就是所有的源文件,包括 .cpp
和 .h
文件。
例如,
#include <iostream>
using namespace std;
int a, b=3; //全局變量
void fn(){
cout << a << endl << b << endl;
}
int main(){
fn();
cout << a << endl << b << endl;
return 0;
}
3、局部變量與全局變量的區(qū)別
1)局部變量是聲明在塊或者函數(shù)內(nèi)部的變量。局部變量的作用域局限于該塊或者函數(shù)。局部變量如果沒有初始化,將包含垃圾數(shù)據(jù)。
2)全局變量是在所有塊和函數(shù)之前聲明的變量。全局變量對(duì)所有在它之后聲明的函數(shù)有效。全局變量有默認(rèn)值初始化,如0
。
注意:如果要調(diào)用另外一個(gè)文件中的全局變量,如果再聲明一個(gè)同名的全局變量,那么編譯器會(huì)因?yàn)橹孛麍?bào)錯(cuò),這個(gè)時(shí)候就要使用extern
變量。extern
聲明告訴編譯器這個(gè)變量的定義在其他文件中,所以并不會(huì)為它分配內(nèi)存。
4、靜態(tài)局部變量和靜態(tài)全局變量區(qū)別
1)非靜態(tài)全局變量的作用域是整個(gè)源程序 ,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。
2)靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它。
5、C++命名空間
命名空間是ANSI C++引入的可以由用戶命名的作用域,用來處理程序中常見的同名沖突??梢越⒍鄠€(gè)相互分割的作用域,把實(shí)體進(jìn)行分隔,以免名字沖突。
1)訪問命名空間中作用域內(nèi)實(shí)體
命名空間名::命名空間成員名;
2)標(biāo)準(zhǔn)命名空間std
C++標(biāo)準(zhǔn)庫所有標(biāo)識(shí)符都是在一個(gè)名為std的命名空間中定義的,或者說標(biāo)準(zhǔn)頭文件中函數(shù)、類和對(duì)象模板是在命名空間std
中定義的。可以在文件開頭加入 using namespace std;
使用時(shí)就可以不寫std::
。
使用示例:
#include <iostream>
using namespace std;
namespace Animal
{
void Show()
{
//如果上面沒using namespace std; 則使用cout需要std::cout
cout << "Animal" << endl;
}
}
namespace Person
{
void Show()
{
//如果上面沒using namespace std; 則使用cout需要std::cout
cout << "Person" << endl;
}
}
int main()
{
Animal::Show();
Person::Show();
return 0;
}
以上為本次所有分享內(nèi)容
- 上一篇:C++ 存儲(chǔ)類型
- 下一篇:C++ 預(yù)處理命令