C/C++基礎----變數和基本類型

來源:互聯網
上載者:User

標籤:雙層   字串   聲明   同名   strong   inline   出現   編譯   小尺寸   

變數和基本類型不同平台下基本類型的位元組數

類型

16位平台

32位平台

64位平台

char

1

1

1

short

2

2

2

int

2

4

4

long

4

4

8

long long

/

8

8

指標

2

4

8

float

4

4

4

double

8

8

8

 

類型的最小尺寸

類型

含義

最小尺寸

bool

布爾類型

未定義

char

字元

8位

wchar_t

寬字元

16位

char16_t

Unicode字元

16位

char32_t

Unicode字元

32位

short

短整型

16位

int

整型

16位

long

長整型

32

long long

長整型

64

float

單精確度浮點數

6位有效數字

double

雙精確度浮點數

10位有效數字

long double

擴充雙精確度浮點數

10位有效數字

資料類型選擇的經驗準則
  • 當知曉數值不可能為負時,選用無符號類型
  • 使用int執行整數運算,short常常太小,long和int一般尺寸一樣。如果int不夠,用long long。

  • 在算數運算式中不要使用char或bool,使用char特別容易出問題。如果要使用一個不大的整數,那麼明確執行為signed char或unsigned char。

  • 執行浮點數運算用double,float通常進度不夠而且兩者計算代價相差無幾。Long double一般沒有必要,且消耗不容忽視。

 

有符號類型和無符號類型
  • 無符號類型賦值超出其範圍,結果是模數後的值。如unsigned char c = -1;  //假設char佔8bit,c的值為255
  • 有符號類型賦值超出其範圍,結果未定義。如signed char c2 = 256;  //假設char佔8bit,c2的值未定義
  • 切勿混用帶符號類型和無符號類型。
  • 算數運算式中既有無符號數又有帶符號數,帶符號的數會轉換成無符號的數

 

指定字面值的類型

字元和字串字面值

首碼

含義

類型

u

Unicode16字元

char16_t

U

Unicode32字元

char32_t

L

寬字元

wchar_t

u8

UTF-8(僅用於字串字面常量)

char

整型字面值

浮點字面值

u or U

unsigned

f or F

float

l or L

long

l or L

long double

ll or LL

long long

 

 

初始化與賦值

初始化和賦值是兩個完全不同的操作

  • 定義於函數體(塊範圍)內的內建類型的對象如果沒有初始化,則其值未定義。養成初始化內建變數的習慣。
  • 類的對象如果沒有顯式地初始化,則其值由類確定。

 

聲明與定義
  • 聲明使得一個名字為程式所知,定義會申請儲存空間,還可能為其賦初始值
  • (分離式編譯)

    如果想聲明一個變數而非定義它,就在變數名前添加關鍵字extern,而且不要顯式地初始設定變數
  • 對於複雜的聲明語句,可以從變數名從右往左理解

 

指標
  • 常見錯誤:解引用無效指標(null 指標或已釋放的指標)
  • 建議:初始化所有指標,並且盡量等定義了對象之後再定義指向它的指標。
  • 推薦nullptr而非0,0指標具有二義性。

 

const和constexpr
  • const對象預設在檔案內有效,當多個檔案出現了同名const變數,等同於不同檔案中定義了獨立的變數。

    如果想不同檔案之間共用const,則不管在聲明還是定義中都添加extern關鍵字。

  • 頂層const表示本身是個常量,底層const表示指標指向的對象是一個常量。

  • 執行對象拷貝操作時,頂層const不受影響,底層const卻不容忽視

 

常量運算式:值不會改變且在編譯階段就能計算結果的運算式。

  • 複雜系統中很難分辨初始化是不是常量運算式,C11允許聲明為constexpr由編譯器來驗證
  • 儘管指標和引用可以定義成constexpr,其初始值受到嚴格的限制。constexpr指標的初始值必須是nullptr或者0,或者是儲存於某個固定地址中的對象。儲存於函數體之外的對象其地址固定不變,能用來初始化constexpr指標。

 

auto與decltype
  • auto一般會忽略掉頂層const,同時保留底層const。
  • decltype的運算式是一個變數,則decltype返回該變數的類型,包括頂層const和引用在內。

  • decltype如使用的運算式不是一個變數,則返回運算式結果對應的類型。
  • 如運算式是解引用操作,則得到參考型別。

  • 如果是加了雙層括弧的變數,則結果永遠是引用。

 

 

預先處理變數無視C++中關於範圍的規則

C/C++基礎----變數和基本類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.