C++系列: 巢狀名稱空間
目錄
1.什麼是巢狀名稱空間?
巢狀名稱空間就是在名稱空間裡面在定義其它的名稱空間,就像是俄羅斯套娃。
namespace np1
{
namespace np2
{
namespace np3
{
}
}
...
}
2.實驗
2.1 外部引用巢狀名稱空間內的符號
情況一
#include <iostream>
using namespace std;
namespace np1
{
namespace np2
{
void func2()
{
cout << "np1::np2::func2" << endl;
}
}
void func1()
{
cout << "np1::func1" << endl;
}
}
int main()
{
np1::func1();
np1::np2::func2();
return 0;
}
實驗結果
表明巢狀名稱空間的引用是符合namespace語法的,沒有特殊之處。
情況二
using namespace np1;
int main()
{
func1();
np2::func2();
return 0;
}
輸出結果一樣。
2.2 名稱空間內容不同層次間符號的引用
情況一:第一層呼叫第二層
#include <iostream>
using namespace std;
namespace np1
{
namespace np2
{
void func2()
{
cout << "np1::np2::func2" << endl;
}
}
void func1()
{
np2::func2();
}
}
int main()
{
np1::func1();
return 0;
}
實驗結果
表明在名稱空間內部的不同層次符號引用依然遵循namespace語法。
情況二:第二層呼叫第一層
#include <iostream>
using namespace std;
namespace np1
{
void func1()
{
cout << "np1::func1" << endl;
}
namespace np2
{
void func2()
{
func1();
//np1::func1();
}
}
}
int main()
{
np1::np2::func2();
return 0;
}
實驗結果
表明np1相對於np2來說,是預設名稱空間或者是全域性名稱空間。
情況三:第二層呼叫第一層,但是第一層和第二層存在相同的符號
#include <iostream>
using namespace std;
namespace np1
{
void func1()
{
cout << "np1::func1" << endl;
}
namespace np2
{
void func1()
{
cout << "np1::np2::func1" << endl;
}
void func2()
{
func1();
}
}
}
int main()
{
np1::np2::func2();
return 0;
}
實驗結果
表明np2優先會呼叫自己內部的符號。正如一個函式的內部,它會優先呼叫自己的區域性變數,接著才考慮尋找全域性變數。
3.最後
一定要記住,namespace本質是用來解決命名衝突的問題。
相關文章
- 內聯和巢狀名稱空間巢狀
- c++系列:匿名名稱空間C++
- 名稱空間與巢狀命名中的處理巢狀
- C++名稱空間C++
- C++ 名稱空間C++
- Python動態引數、名稱空間、函式巢狀、global和nonlocalPython函式巢狀
- C++名稱空間的使用 (轉)C++
- 名稱空間
- JAXB名稱空間及名稱空間字首處理
- C++基礎:什麼是名稱空間C++
- PHP 名稱空間PHP
- PHP名稱空間PHP
- vuex名稱空間Vue
- jQuery 名稱空間jQuery
- JavaScript 名稱空間JavaScript
- C++名稱空間與友元函式薦C++函式
- python名稱空間Python
- 更改模型名稱空間模型
- 全域性名稱空間
- Python 名稱空間Python
- C++ 動態記憶體分配與名稱空間C++記憶體
- C++ 中名稱空間的 5 個常見用法C++
- PHP 核心特性 - 名稱空間PHP
- Spring名稱空間解析Spring
- 使用名稱空間:基礎
- ros節點名稱空間ROS
- JavaScript 中的名稱空間JavaScript
- PHP名稱空間概念解析PHP
- JAXB玩轉名稱空間
- Python 的名稱空間Python
- System.Web 名稱空間Web
- Python中名稱空間是什麼?名稱空間生命週期是多久?Python
- System.Security.Cryptography 名稱空間
- Objective-C 的名稱空間Object
- system.security.Principal名稱空間
- System.CodeDom 名稱空間
- System.Windows.Forms 名稱空間WindowsORM
- 跟我一起學習C++ 之 初識名稱空間C++