本篇文章主要解釋域的思想
域之所以存在,主要是爲了讓名字可以被複用,這樣就極大節省了取名字的費時費力,試想一下,如果對於每個數據我們都要取一個全新的名字,取一兩個還行,取一兩百個的時候,自己都不知道該取個啥名字才能不重複了。
如果學過數學的集合概念的話,用集合的思想來理解域是很適合的,集合本身要求不重複,並且具有包含關係
有三種域,需要大家先對它們有個概念:
名字空間域:在函數聲明、函數定義、類定義之外的程序文本,統稱爲名字空間域,最外層的名字空間域,我們稱之爲全局名字空間域或者是全局域
局部域:包含在一個函數定義裏面的程序文本
類域:包含在一個類定義裏面的程序文本
我們來看一個例子:
#include<stdio.h>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
int s1 = 2;
if (s1 == 2)
{
int s1 = 1;
cout << s1 << endl;
}
cout << s1;
return 0;
}
上面這段例子,main函數定義以外的部分就是全局域,而main函數內部的就是局部域,這個以外以內怎麼區分呢?找大括號,看main後面跟着的大括號裏面的,就是函數定義內部,大括號外面的,就是函數定義外部
最終輸出的結果是:
1
2
大家可以看到有兩個int s1,爲什麼不會出現重複定義呢?因爲第二個int s1語句是在一個嵌套域中,例如:
①{
②{
}
}
這裏有兩個域(看大括號),①和②,其中②是①的嵌套域,那麼在①中有個人叫張三,在②中也可以讓一個人叫張三,有朋友可能要問,既然有兩個人都叫張三,程序怎麼知道我指的是哪個?回答:在②中出現的張三,指的就是第二個張三,直到你出了②域,你再寫張三,指的就是第一個張三了。