C 的過載解釋與命名空間

2021-08-17 17:20:13 字數 1377 閱讀 5056

c++這個詞在中國大陸的程式設計師圈子中通常被讀做「c加加」,而西方的程式設計師通常讀做「c plus plus」,「cpp」。 它是一種使用非常廣泛的計算機程式語言。c++是一種靜態資料型別檢查的,支援多重程式設計正規化的通用程式語言。它支援過程化程式設計、資料抽象、物件導向程式設計、製作圖示等等泛型程式設計等多種程式設計風格。

同一作用域類,一組函式的函式名相同引數列表不同(個數不同或型別不同),返回值可同可不同。不僅函式可以過載,運算子也可以過載。

重要的是main函式不支援過載,因為程式只有乙個入口!!!

c語言和c++在底層的函式解析規則不同,導致c語言不支援從過載。

翻譯過程一般分為:預處理—-編譯——彙編——鏈結

預處理:展開標頭檔案,巨集替換,去掉注釋,條件編譯等工作。生成.i檔案

編譯:語法檢查,生成彙編**。 生成.s檔案

彙編:將彙編**轉成機器碼 。 生成.o檔案

鏈結:將之前生成的檔案鏈結到一起,生成可執行檔案。 生成.out檔案

乙個函式的宣告如下:

void  chongzai(int x,int y);
在c語言中,編譯器在編譯後在庫中的名字為_chongzai

在c++中,編譯器在編譯後在庫中的名字為_chongzai_int_int

還有乙個函式的宣告如下:

void chongzai(float x,float y);
可知道在c語言中,編譯器在編譯後在庫中的名字為_chongzai

在c++中,編譯器在編譯後在庫中的名字為_chongzai_float_float

在鏈結時,都是找名字進行鏈結的,就比如以上兩個函式,

在c語言中兩個的名字一樣,就會在鏈結中報錯。

c++中它們的名字不一樣,所以就不會報錯。

命名空間的名字在其所在作用域中是唯一的,命名控制項可以在全域性作用域或者其它作用域內部定義,但是不能在函式或者類的內部定義

每個命名空間都是乙個作用域:

不會出現c語言中的命名衝突問題。

如果從命名空間外部使用命名空間成員:需要使用作用域辨別運算子::來處理。

當我們使用該變數時要加上作用域限定符。

命名空間可以巢狀定義:

C 命名空間解釋

此文 於網路,但由於種種原因,不能確定其始作者,特此說明 比如你加了using namespace std 那麼std命名空間中定義的東西就不用加std 了。而iostream.h這個標頭檔案是為了相容c,c根本就沒命名空間這個概念,所以不用加using namespace std 了 如果用通俗的...

C 命名空間解釋

using關鍵字 如果在程式中需要多次引用某個命名空間的成員,那麼按照之前的說法,我們每次都要使用範圍解析符來指定該命名空間,這是一件很麻煩的事情。為了解決這個問題,人們引入了using關鍵字。using語句通常有兩種使用方式 using namespace 命名空間名稱 將整個命名空間釋放。usi...

過載與命名空間

與實參相關的查詢與過載 對於接受類型別實參的函式來說,其名字查詢將在實參類所屬的命名空間中進行。這條規則對於我們如何確定候選函式集同樣也有影響。我們將在每個實參類 以及實參類的基類 所屬的命名空間中搜尋候選函式。在這些命名空間中所有與被呼叫函式同名的函式都將被新增到候選集當中,即使其中某些函式在呼叫...