c 基礎,引用過載命名空間

2021-08-20 12:28:20 字數 2141 閱讀 7611

命名空間解決全域性命名衝突的問題

標準c++庫中的所有元件都是在乙個被稱為std的名字空間中宣告和定義的。在 採用標準c++的平台上使用標準c++庫中的元件,只要寫乙個using指示符: using namespace std; 就可以直接使用標準c++庫中的所有成員。 或者 std::成員 的方式也可以使用c++庫里的成員

#include 

using

namespace

std;

int max = 10;

int main()

**會編譯錯誤。因為std空間裡定義了同名的max。

namespace用法:

using namespace 空間名,缺點是不能再定義和命名空間相同的變數

空間名::變數,不會和其他空間衝突但寫起來麻煩

在同一作用域裡,一組函式的函式名相同,引數列表不同(個數不同/型別不同)

因為c語言目標檔案的符號表如果有相同的函式名稱就會造成衝突。

編譯過程:

c++編譯生成的符號表時,函式名會加上它的引數資訊,所以如果同名函式引數不同,符號表的key就不同。稱為c++函式名修飾

這樣在呼叫同名函式時,在編譯期間就能通過函式實參去查符號表,呼叫不同的同名函式。

linux使用objdump檢視符號表可以觀察函式名規則。

int add(int a = 1, int b =2)

int add(int a, int b = 2, int c = 3)

只能從右往左進行預設賦值。

定義引用

int a = 10; int& b = a;

a是乙個變數名稱,b是a這個變數的第二個別名,兩者位址相同。

引用規則:

定義引用必須初始化

乙個變數可以有多個別名

只能初始化一次,不能再改變引用指向

const

int a = 10;

int& b = a; //許可權放大,不能編譯通過

const

int& b = a; //正確

const

int& c = 10; //常量取個別名

int x = 10;

double d = x; //隱式型別轉換

const

double& e = x; //x轉換到double有個臨時變數,e就是對臨時變數取的別名

const修飾作用,看const和*的相對位置

int a = 10;

const

int *p1 = &a; //指標指向內容不能更改

int *p2 = p1; //許可權放大

int* const p3; //p3的指向不能改變

int* p4 = p3; //正確,不會影響p3的指向

形參是實參的別名,指的是同一塊記憶體空間

//引用

void swap(int& a, int& b)

//傳值

void swap(int a, int b)

//傳址

void swap(int *a, int *b)

傳址和傳址都會在棧中壓入臨時變數,看似引用沒有建立臨時變數,其實在底層引用也是利用指標的原理。

int& add(int& a, int& b)

int main()

也就是說上述引用返回值是錯誤的,引用的值是棧空間上的。

假設返回的引用物件出了當前函式的作用域依舊存在,則可以返回引用。

指標和引用的區別聯絡:

引用的使用方式像值傳遞,性質像址傳遞。

引用只能在定義時初始化一次,之後不能改變指向其它變數;指標變數的值可變。

引用必須指向有效的變數,指標可以為空。 所以不會出現引用判空的情況,引用比指標更安全。

sizeof,++,–意義不一樣。

C 命名空間 函式過載 引用 內聯函式

c 關鍵字 c 98 有63個 命名空間解決了 名字衝突,有作用域的作用 命名空間的使用格式 namespace n1使用方法 1.n1 變數 2.using n1 變數 3.using namespace n1 c 的輸入輸出 標頭檔案 iostream 命名空間 using namespace ...

C 筆記 函式過載 引用 命名空間

引用 引用在定義時必須初始化 乙個變數可以有多個引用 引用一旦引用乙個實體,再不能引用其他實體 int a 10 int ra a cout a a cout ra ra endl ra 20函式 函式過載 函式過載 是函式的一種特殊情況,c 允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函...

C 過載 預設 命名空間

剛學習c 入門階段對過載 預設 命名空間的理解 c幾乎是c 的乙個子集,所以c語言支援的語法在c 基本都支援並需要使 用。c plus plus c 所以在c的基礎上又有了很多新的特性 過載 下面看兩組函式,分別是用c和c 寫的列印函式,分別列印 int 型 char 型 string 型 c要完成...