網站首頁 編程語言 正文
1.前言
在c++中,為了避免代碼名稱上所產生沖突,引入了命名空間這個東西。
命名空間相當于劃分出一定的空間,為特定的類型,函數和變量等的名稱(也就是標識符)提供了一個范圍。
命名空間之內的標識符訪問彼此沒有限制,命名空間之外的標識符可通過使用每個標識符的完全限定名來訪問成員,也可通過單個標識符的using聲明或命名空間中所有標識符的using指令來訪問成員。
命名空間可以定義在幾個不同的部分中,因此命名空間是由幾個單獨定義的部分組成的。一個命名空間的各個組成部分可以分散在多個文件中。
2.定義
命名空間的定義使用關鍵字namespace,后跟命名空間的名稱。
namespace namespace_name
{
// 代碼聲明
}
調用帶有命名空間的函數或者變量時,需要在前面加上命名空間的名稱(使用完全限定名)。
namespace_name::code; // code 可以是變量或函數
樣例:
#include<iostream>
using namespace std;
namespace A
{
void func()
{
cout << "A" << endl;
}
}
// 第二個命名空間
namespace B {
void func()
{
cout << "B" << endl;
}
}
int main()
{
// 調用第一個命名空間中的函數
A::func();
// 調用第二個命名空間中的函數
B::func();
return 0;
}
結果:
3.using 指令
當使用using 指令時,便可不用加完全限定名直接訪問。
這個指令會讓編譯器直接使用namespace里的所有名稱。
樣例:
#include<iostream>
using namespace std;
namespace A
{
void func()
{
cout << "A" << endl;
}
}
// 第二個命名空間
namespace B {
void func()
{
cout << "B" << endl;
}
}
using namespace B;
int main()
{
// 只會調用第二個命名空間中的函數
func();
return 0;
}
結果:
4.using 聲明
使用 using 聲明,以將一個標識符引入范圍:
#include<iostream>
using namespace std;
namespace A
{
class a
{
public:
void func()
{
cout << "A" << endl;
}
};
}
using namespace A;
A::a aa;
int main()
{
aa.func();
return 0;
}
結果為:
5.嵌套的命名空間
一個命名空間中可以定義另一個命名空間,一般形式為:
namespace namespace_name1 {
// 代碼聲明
namespace namespace_name2 {
// 代碼聲明
}
}
像上列代碼,如果要訪問namespace_name2中的成員,我們得使用::運算符來訪問:
// 訪問 namespace_name2 中的成員
using namespace namespace_name1::namespace_name2;
// 訪問 namespace_name1 中的成員
using namespace namespace_name1;
樣例:
#include<iostream>
using namespace std;
namespace A
{
void func()
{
cout << "A" << endl;
}
// 第二個命名空間
namespace B
{
void func()
{
cout << "B" << endl;
}
}
}
using namespace A::B;
int main()
{
// 只會調用第二個命名空間中的函數
func();
return 0;
}
結果為:
原文鏈接:https://blog.csdn.net/qq_64109690/article/details/126735655
相關推薦
- 2022-07-02 TiDB中的RocksDB讀寫和Raft日志同步
- 2023-04-14 拯救強迫癥Android?Builder模式_Android
- 2022-06-30 詳解Python如何實現尾遞歸優化_python
- 2022-06-18 Android?ProgressBar實現進度條效果_Android
- 2022-04-25 C#使用NPOI實現Excel導入導出功能_C#教程
- 2022-12-29 Python?PyQt5實現拖拽與剪貼板功能詳解_python
- 2022-04-24 torch.utils.data.DataLoader與迭代器轉換操作_python
- 2022-12-26 python畫圖時linestyle,color和loc參數的設置方式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支