int * 是一種指向int型別的指標。
const int* 是指向const int型別的指標。
int *const 指向int型別的常量指標。
const int× &又是不同的type。(指向常量指標的引用)
int* const& 指向指標的常量引用。
const int* const& 指向常量指標的常量引用
當你呼叫
void fun(const int *&) ->要求引數的型別 : 指向const int型別的指標 的引用
int *b = new int(0);
fun(b);//error
傳入的引數為int*, 如果要將int×轉成const int*& ,需要先將int*轉換為const int* 再將const int*轉換為const int* &,這需要兩個步驟的轉換。
實際上編譯器的 預設轉換最多只能支援乙個步驟的轉換!! 超過兩步以上的轉換,是不支援的。
當編譯器無法找到一步就能成功轉換的方法時,自然就會報錯了。
當你寫出一下的**時,
int *d = new int(0);
fun((const int *)d);//error
delete d;
當你使用fun((const int *)d)時,毫無疑問的是你引入了乙個臨時變數,當你想引用乙個臨時變數的時候,這個引用必須是const的,臨時變數必須被const引用。
而你函式的宣告,要求的是指向常量指標的引用,不是const引用,所以引用會失敗。
當然,如果你這樣呼叫:
int *e = new int(0);
fun((const int *&)e);//ok
delete e;
這時候你創造了乙個臨時的引用,但是變數型別和fun的宣告的引數型別是一致的,所以是ok的。
引用,const引用,指標
引用,const引用,指標 一 引用 1 定義 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。2 宣告方法 型別 引用變數名 已定義過的變數名。3 特點 l 乙個變數可以取多個別名 但引用與其所代表的變數共享同一記憶體空間 模擬 人的別名 l 引用必須初始化,且必須宣告引用的型別...
指標和引用,const 指標和const 引用
指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...
指標 引用 const
宣告語句 基本資料型別 宣告符。宣告符命名了乙個變數並指定該變數為與基本資料型別有關的某種型別。一 引用 1.定義引用時,程式把引用和它的初始值物件繫結在一起,而不是把初始值拷貝給引用。無法令引用重新繫結到另外乙個物件。int ival 2 int refval ival 2.引用必須初始化,初始值...