c++系列:匿名名稱空間
文章目錄
1.什麼是匿名名稱空間?
匿名名稱空間就是一個沒有名字
的名稱空間。
namespace
{
func()
{
...
}
}
2.匿名名稱空間有什麼用處?
- 匿名名稱空間裡的內容只能被本檔案呼叫,不能被外部引用;
- 匿名名稱空間中的變數特點跟全域性變數一樣,而函式特點像是新增了static的功能一樣。兩者僅此在本檔案使用
3.實驗
3.1在匿名空間中引用其它名稱空間
#include <iostream>
using namespace std;
namespace np
{
void func1()
{
cout << "this is func1" << endl;
}
}
namespace
{
void func2()
{
np::func1();
}
}
int main()
{
func2();
return 0;
}
實驗結果
3.2匿名名稱空間中引用自己名稱空間中的方法
#include <iostream>
using namespace std;
namespace
{
int cnt = 0;
void func2()
{
cout << "this is func2" << endl;
}
}
int main()
{
cnt += 1; //像全域性變數一樣讀取
cout << cnt << endl;
func2(); //像全域性變數一樣讀取
return 0;
}
實驗結果
3.3其他名稱空間中引用匿名名稱空間中的方法
#include <iostream>
using namespace std;
namespace
{
void func2()
{
cout << "this is func2" << endl;
}
}
namespace np
{
void func1()
{
func2();
}
}
int main()
{
np::func1();
return 0;
}
實驗結果
3.4不同檔案呼叫匿名名稱空間
//test2.cpp
//namespace xxx {extern func1()}; //連名字元號都沒有,無法宣告....
void func1()
{
func2();
}
test1.cpp
#include <iostream>
void func1();
using namespace std;
namespace
{
void func2()
{
cout << "this is func2" << endl;
}
}
int main()
{
func1();
return 0;
}
實驗結果
首先,匿名名稱空間沒有名字,或者說把名字給隱藏了,無法像xxx::func2()
這樣子呼叫,並且在test2.cpp中也無法宣告匿名名稱空間空間(不符合語法)。
4.最後
匿名名稱空間的本質是什麼?
就是將名稱空間的名字元號給去掉,讓其他檔案找不到。
C++ 新的標準中提倡使用匿名名稱空間,而不推薦使用static,因為static用在不同的地方,涵義不同,容易造成混淆.另外,static不能修飾class。
相關文章
- C++系列: 巢狀名稱空間C++巢狀
- C++名稱空間C++
- C++ 名稱空間C++
- 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++
- acm演算法之c++標準庫及名稱空間stdACM演算法C++
- Kubernetes 名稱空間入門
- PHP 物件導向 (三)名稱空間PHP物件