網站首頁 編程語言 正文
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-05-09 .Net?Core創建Api進行文件上傳功能_實用技巧
- 2023-01-14 Python?使用pip在windows命令行中安裝HDF?reader包的操作方法_python
- 2022-11-03 python回歸分析邏輯斯蒂模型之多分類任務詳解_python
- 2022-08-26 C++超集C++/CLI模塊的基本語法_C 語言
- 2022-03-26 C++中靜態數據成員使用示例_C 語言
- 2022-12-03 Android開發數據結構算法ArrayList源碼詳解_Android
- 2022-11-17 使用flutter的showModalBottomSheet遇到的坑及解決_Android
- 2024-03-07 做springboot-分模塊技術時新建立Maven模塊時報錯
- 最近更新
-
- 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同步修改后的遠程分支