const:
decltype
自定義資料結果
c++是支援分離式編譯的,因此為了支援分離式編譯,c++中宣告與定義是分開的。
宣告就是讓程式知道有這個名字
定義就是建立乙個與名字有關的實體
如果想宣告卻不定義,就在變數前面加關鍵字extern,而且不能顯式的初始化變數:
extern
int i;
//宣告卻沒定義i
int i;
//宣告並且定義i
任何顯式初始化的宣告即成為定義,如果前面加了extern關鍵字也是一樣。並且如果在函式體內初始化由extern關鍵字標記的變數的話,會直接報錯。
extern
int i=
1//定義
值得注意的是,變數只能被定義一次,但可以被宣告多次
在多檔案中,如果多個檔案想共用乙個變數,那麼這個變數的定義只能出現在乙個檔案中,其他檔案則必須宣告該遍變數
int x=1;
extern
int x;
extern
int x;
引用就是為物件起另外的名字
c++在定義引用應用時就會把它與初值繫結在一起,而不是拷貝給它。並且,一旦初始化完成無法將引用繫結到另外乙個物件上。因此,引用必須初始化。
要牢記的是,引用的型別必須與所引用物件的型別一致,並且不能與字面值或某個表示式的計算結果繫結在一起。
除了以下兩種情況:
初始化常量引用時允許將以任意表示式作為初始值,只要表示式的結果能轉換成對應型別即可。
int i =10;
const
int&x1 =
2* i;
//正確
int&x2 =
2* i;
//錯誤,因為x2並非乙個常量引用
void* 指標能儲存任何物件的位址,但是並不能通過 void*指標操作所指物件,因為不知道這個指標指的是什麼型別。
在constexpr的宣告中如果定義了乙個指標,constexpr僅對指標有效,與指標所指物件無關。
const
int*p =
nullptr
;//指向整數常量的指標
constexpr
int*p =
nullptr
;//指向整數的常量指標
預設狀態下,const物件僅在檔案內有效。在編譯的過程中,編譯器會把所有用到該const變數的地方都替換成相應的值。所以,每個檔案必須知道const的初始值(const物件也必須初始化)。但由於預設狀態下,const物件僅在檔案內有效,當多個檔案同時出現同名的const變數時,其實就相當於分別定義了不同的變數。
如果想只定義一次怎麼做呢?只需要無論是宣告還是定義都標記extern關鍵字即可。
extern
const i=1;
extern
const i;
把引用繫結到const物件上,即為對常量的引用。但與普通引用不同的是不能讓非常量引用指向乙個常量變數。
初始化常量引用時允許將以任意表示式作為初始值,只要表示式的結果能轉換成對應型別即可。
雖然不能讓非常量引用指向乙個常量物件,但是常量引用所繫結的物件卻可以是非常量物件,只是不能通過常量引用對繫結的物件進行修改。
int i=10;
int x1&
= i;
//正確
const
int x2&
= i;
//正確
x1 =
0//正確
x2 =
0//錯誤,不能通過x2修改i
請分清楚指向常量的指標和常量指標
指向常量的指標:
const
int x=1;
const
int*p =
&x;//p為指向常量x的指標
int*p =
&x;//錯誤,因為p只是個普通指標
常量指標(不變的指標而不是指標指向的值):
int x=0;
int*
const p =
&x;//p為常量指標
const
int xx=0;
const
int*
const pp=
&xx;
//pp為指向常量的常量指標
總的來說,const分為頂層const以及底層const。其中頂層const指本身是乙個常量,可以表示任意的物件是常量。而底層const則與指標和引用等符合型別有關,表示所指物件是乙個常量。(存在同時是頂層和底層const的情況)
int i=0;
int*
const p1 =
&i;//頂層const
const
int p2 = i;
//頂層const
const
int*
const p3 =
&p2;
//左邊的const是底層const,右邊的const是頂層const
const
int&x = p2;
//底層const
deltype((var))(注意是雙層括號)時結果永遠是引用。
deltype(var)的結果當var是引用時結果才是引用。
如果表示式是解引用操作,則deltype將得到引用型別。
c++11規定可以為資料成員提供類內初始值
C 基本型別和變數
算術型別包含整型 包括字元和布林型別 和浮點型。主要型別 bool char wchar t char16 t char32 t short intlong long long float double long double 在程式中,帶符號型別和不帶符號型別最好不要混用,容易出現錯誤。如下圖 2...
C 變數和基本型別
變數的宣告與定義 聲加粗樣式明用於向程式表明變數的型別和名字,用extern表示,它不分配記憶體,定義則用於分配儲存空間,當然,定義也是宣告。const const修飾變數後,其值不可被修改,任何修改的嘗試都會導致編譯錯誤。引用 即物件的另乙個名字,在實際程式中主要用作函式的形參。1 引用是它繫結的...
c 基本型別和變數
基本型別,c 內建型別 setlocale lc all,chs bool bo true char ch a wchar t wch l 中國 short sh 32767 32768 32767 int i 10 32768 32767 long l 123456 2147483648 2147...