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++
- 名稱空間
- PHP名稱空間PHP
- PHP 名稱空間PHP
- 20200109 - 名稱空間
- python名稱空間Python
- vuex名稱空間Vue
- 15-名稱空間
- Python名稱空間包Python
- 11. 名稱空間
- ts---名稱空間
- 使用p名稱空間和c名稱空間的XML快捷方式XML
- C++ 動態記憶體分配與名稱空間C++記憶體
- C++名稱空間、標準輸入輸出、引用C++
- Python中名稱空間是什麼?名稱空間生命週期是多久?Python
- ros節點名稱空間ROS
- PHP 核心特性 - 名稱空間PHP
- Kubernetes 名稱空間入門
- 3-1 名稱空間
- 什麼是名稱空間?
- Python作用域和名稱空間Python
- spring框架中的名稱空間Spring框架
- System.Security.Cryptography 名稱空間
- 內聯和巢狀名稱空間巢狀
- Python中名稱空間包簡介Python
- PHP 物件導向 (三)名稱空間PHP物件
- OpenCV 名稱空間學習筆記OpenCV筆記
- php名稱空間的呼叫順序PHP
- 瞭解下C# 名稱空間(Namespace)C#namespace
- PHP 獲取不帶名稱空間的類名PHP
- yaml檔案中在哪加名稱空間?YAML
- Kubernetes 的層級名稱空間介紹
- Python3 名稱空間和作用域Python
- 自研 PHP 框架 1.1_名稱空間PHP框架
- 深入講解Python名稱空間規則!Python
- 對名稱空間的一點個人理解
- DIY 實現 ThinkPHP 核心框架(四)名稱空間PHP框架