📢博客主頁:https://blog.csdn.net/2301_779549673
📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
📢本文作為 JohnKi 的學習筆記,引用了部分大佬的案例
📢未來很長,值得我們全力奔赴更美好的生活?
文章目錄
- 📢前言
- 🏳??🌈什么是 namespace
- 🏳??🌈如何定義 namespace
- ??定義
- 嵌套
- 融合
- 🏳??🌈如何使用 namespace
- 👥總結
📢前言
要建造簡單的房屋,首先要打地基、搭框架。如果一開始沒有牢固的結構,后面就很難建造窗子、門框、圓屋頂和鑲木地板的舞廳等。同樣,學習計算機語言時,應從程序的基本結構開始學起。只有這樣,才能一步一步了解其具體細節,如循環和對象等。
這篇博客,筆者就介紹一下由 C語言
轉到 C++
時,我們第一個會遇到的語句即 using namespace std
,并著重介紹一下其中的含義和由來
🏳??🌈什么是 namespace
Namespace
(命名空間)是在計算機科學中常見的概念,用于表示符號的命名范圍或作用域。在編程中,命名空間通常用于避免命名沖突,即當多個庫、模塊或包中存在相同名稱的變量、函數或類時,通過將它們放置在不同的命名空間中來區分它們。
我們可以先看一下下面這塊C語言
的代碼
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int rand = 1;int main()
{printf("%d", rand);return 0;
}
如果不存在什么命名問題的話,這里會出現的結果將是1
,但是我們實操會發現出現重定義
的錯誤提示
為什么會出現?
那是因為在stdlib.h
庫中也存在rand
這個變量名
因此
在當項目量過大,項目人數過多時,時常會出現一些大佬們命名重復的情況,為了避免這個情況,于是就在C++
中引用了namespace
,用來存放和保證命名庫不出錯,解決命名沖突
🏳??🌈如何定義 namespace
??定義
定義語法:
namespace N1
{//支持變量int a = 1;//支持函數int fun(){return 1;}//支持結構體struct S{int s;};
}
我們通過 namespace
+ 命令空間名
+ {}
在花括號中填入想要命名的變量就可以了
基本上的類型都是支持的
嵌套
namespace N2
{int a = 1;namespace N3{int b = 1;}
}
不僅如此namespace
是支持嵌套使用的,就比如這里在N2
空間內我們又創建了一個N3
的命名空間
融合
同一個工程中,允許存在多個相同名稱的命名空間,編譯器最后會把他們合成一個命名空間。
namespace N4
{int a = 1;
}
namespace N4
{int b = 2;
}
融合結果
namespace N4
{int a = 1;int b = 2;
}
🏳??🌈如何使用 namespace
既然已經知道了namespace
的定義方法,那自然需要知道如何使用了
這里就可以介紹一下using namespace std
的具體含義了
這其實就是一個名為std
的命名空間的直接使用
,std可以看為C++
語法的標準數據命名空間,就像C語言中的stdio.h
一樣,在C++中常使用的count,cin等都是出自于這個命名庫中,C++標準庫中的函數或者對象都是在命名空間std中定義的。
我們使用using namespace std
就相當于把C++標準庫外殼拆除,因此就可以使用里面的對象和函數了
- 這就是方法1
直接使用
,using namespace + 命名空間名
#include<stdio.h>
namespace N
{int a = 10;int b = 20;
}
using namespace N;
int main()
{printf("%d\n", a); // 正常打印return 0;
}
- 而方法2則是
使用using將命名空間中成員引入
,using + 命名空間名 + :: +成員名
using N::b;
int main()
{printf("%d\n", b);return 0;
}
這樣如果僅僅是需要利用命名空間內的指定成員名直接這樣引用就行了
- 方法3就是
命名空間名 + :: + 變量名
這里可以引用一下全局變量
和局部變量
比如下面這個例子
#include<stdio.h>
int a = 0;
int main()
{int a = 1;printf("%d\n",a);return 0;
}
這部分代碼沒有出錯,因為在指定作用域內,優先局部變量
但如果我們要在這部分域內使用全局變量又該怎么做呢,就需要在變量名前加上::
就行了
#include <iostream>
using namespace std;
int a = 0;
int main()
{int a = 1;printf("訪問局部變量(a):%d\n",a);printf("訪問全局變量(::a):%d\n",::a);return 0;
}
那如果在C++中,有很多個命名空間呢,那就是用方法3命名空間名 + :: + 變量名
了
#include <iostream>
using namespace std;
int main()
{cout << 1 << endl;
}
這部分代碼就可以改成
#include <iostream>
int main()
{std::cout << 1<< std::endl;
}
👥總結
using namespace std;
是一個用于C++
編程的命名空間指令,它通常出現在C++程序的頂部。它的作用是將標準C++庫中的所有標識符引入到當前的命名空間中,使得你可以直接使用這些標識符,而無需在前面添加命名空間限定符 std::。
具體來說,當你編寫C++程序并使用標準C++庫中的類、函數、對象或其他標識符時,通常需要添加 using namespace 命名空間名;
、using 命名空間名 變量名
或使用 命名空間名::
前綴來限定命名空間。
本篇博文對 C++中namespace 做了一個較為詳細的介紹,不知道對你有沒有幫助呢
覺得博主寫得還不錯的三連支持下吧!會繼續努力的~