2-1:C++快速入门之命名空间
文章目錄
- 一:C++關鍵字
- 二:命名空間
- (1)命名空間的作用
- (2)命名空間的定義
- A:命名空間的定義
- B:注意事項
- (3)命名空間的使用
一:C++關鍵字
為什么先要說關鍵字呢,因為在一定程度上,關鍵字可以反映一門編程語言語法的大致特點
C語言共計32個關鍵字,C++共計63個關鍵字
- C語言相關關鍵字的精講:【C語言重點難點精講】關鍵字精講
二:命名空間
一項工程,需要你和小王一起完成,你們兩個在各自編寫的模塊中都編寫了一個相同名字的接口(函數),等到代碼合并時,卻出現了錯誤,原因可想而知——C/C++中,變量,函數以及類會作用于全局域中,相同的名字導致了命名沖突或名字污染
C語言中并不能有效的解決這樣的問題,比如,我們都知道scanf函數是C語言的標準輸入輸出函數,但是在下面的這個例子中,定義了一個名字叫做scanf的變量,這顯然是不可取的,但是這段代碼卻在運行時才報錯最后肯定是無法輸出的,因為產生了歧義。在編譯中首先展開了stdio.h頭文件,scanf函數就在其中(函數名就是函數的首地址),所以執行到這一步,編譯器不知道這里應該是要輸出這個函數的地址還是要輸出你定義的那個變量。
- 上圖中顯示的是該函數的地址
當然這些問題在C++中卻很容易解決——命名空間
(1)命名空間的作用
C/C++中,變量、類的名稱將存在于全局作用域中,重復的名字或其他問題將導致一些不可預見的錯誤。命名空間可以有效的解決這個問題,使用命名空間目的在于將標識符的名稱本地化,以免沖突。
簡單點來說,把名字關進“小黑屋”,你的變量名字和我的變量名字即便是一樣的,但是本質是不一樣的,使用時按照一定方式打開“小黑屋”
(2)命名空間的定義
A:命名空間的定義
定義命名空間時,要使用namespace關鍵字,其后緊接該命名空間的名字,然后寫上“{}”,括號內即是該命名空間的成員。有點像結構體。
namespace N1//將改命名空間定義為“N1” {int a;//可以存放變量void swap(int* a,int*b)//可以存放函數{int temp=*a;*a=*b;*b=temp;} }當然命名空間也是可以嵌套的
namespace N2 {int a;namespace N3{void swap(int* a,int*b){int temp=*a;*a=*b;*b=temp;}} }同一個工程文件允許存在多個相同名稱的命名空間,編譯器最后會將其合并到同一個命名空間中
B:注意事項
定義好命名空間,就相當于定義了一個新的作用域(“小黑屋”),命名空間中的所有內容都局限于該命名空間,除非使用時進行釋放(打開“小黑屋”)。
如下,對于上面的那個例子中,如果定義命名空間,將不會出現錯誤:
(3)命名空間的使用
命名空間的使用主要有三種方法,各有優缺點
1. 命名空間名稱和作用域限制符
2. 使用using將成員導入
3.暴力導入
來看看在C++中輸出Hello World
其余部分可以暫時不用管,其中的using namespace std的作用就是將相關命名空間導入,那么自然而然還會其他常見的寫法
#include <iostream>int main() {std::cout << "Hello World\n" << std::endl;return 0; }總的來說,日常練習時,為了方便,可以使用第三種暴力導入,但是在實際開發中,應當使用第一種和第二種,如果某個變量使用的較多的話,就使用第二種預先將這個變量名導入
總結
以上是生活随笔為你收集整理的2-1:C++快速入门之命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 2282 树的直径
- 下一篇: 7-1:C++的IO流