C 變數和基本型別

2021-10-03 04:35:07 字數 3057 閱讀 8429

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...