第2章 變數和基本型別

2021-10-24 08:57:18 字數 3319 閱讀 2437

long是32位的長整型,long long是64位的長整型,其是c++ 11新定義的。

除去布林型和擴充套件的字元型之外,其他整型可以劃分為帶符號的和無符號的兩種。

其中char和signed char並不一樣。儘管字元型有3種,但是字元的表現形式卻只有2種:帶符號的和無符號的。型別char實際上會表現為上述兩種形式的哪一種,具體由編譯器決定。

選擇型別時的注意事項

(1)如果你的數值超過了int的範圍,可選用long long

(2)在算術表示式中不要使用char或bool,只有存放字元或布林值時才使用它們。

(3)如果你需要使用乙個不大的整數,那麼明確指定它的型別是signed char或unsigned char

(4)執行浮點數運算選用double,long double提供的精度在一般情況下是沒有必要的,況且它帶來的執行時消耗也不容忽視。

型別轉換:

(1)當把乙個浮點數賦給整數型別時,進行了近似處理。結果值將僅保留浮點數中小數點之前的部分。

(2)當把乙個整數值賦給浮點型別時,小數部分記為0。如果該整數所佔的空間超過了浮點型別的容量,精度可能有損失。

(3)當賦給無符號型別乙個超出其表示範圍的值時,結果是初始值對無符號型別表示數值總數取模後的餘數。

我們可以將整型字面值寫作十進位制數、八進位制數或十六進製制數的形式。以0開頭的整數代表八進位制數,以0x或0x開頭的代表十六進製制數。

由單引號括起來的乙個字元稱為char型字面值,雙引號括起來的零個或多個字元則構成字串。

在c++中,初始化和賦值是兩個完全不同的操作。

有4種語句可以實現變數初始化:

int units =0;

int units =

;int units

;int

units(0

);

作為c++ 11新標準的一部分,用花括號來初始化變數得到了全面應用,因此優先使用第3種方式進行初始化。當需要使用多個相同的值進行初始化容器時,推薦使用第4種方式進行初始化

為了支援分離式編譯,c++語言將宣告和定義區分開來。宣告使得名字為程式所知,乙個檔案如果想使用別處定義的名字則必須包含對那個名字的宣告。而定義負責建立與名字關聯的實體。

如果想宣告乙個變數而非定義它,就在變數名前新增關鍵字extern,而且不要顯式初始化變數。任何包含了顯式初始化的宣告即成為定義

和其他內建型別一樣,在塊作用域內定義的指標如果沒有被初始化,也將擁有乙個不確定的值。

指標的值(即位址)應屬於下列4種狀態之一

(1)指向乙個物件

(2)指向緊鄰物件所佔空間的下乙個位置

(3)空指標,意味著指標沒有指向任何物件

(4)無效指標,也就是上述情況之外的其他值

得到空指標最直接的辦法就是用字面值nullptr來初始化指標。

建議初始化所有的指標,並且在可能的情況下,盡量等定義了物件之後再定義指向它的指標

void是一種特殊的指標型別,可用於存放任意物件的位址。

**利用void指標能做的事比較有限:拿它和別的指標比較、作為函式的輸入或輸出,或者賦給另外乙個void*指標**。

預設狀態下const物件僅在檔案內有效。如果想讓const物件只在乙個檔案中定義const,而在其他多個檔案中宣告並使用它。解決的辦法是,對於const變數不管是生命還是定義都新增extern關鍵字,這樣只需定義一次就夠了。

常量表示式const expression是指值不會改變並且在編譯過程就能得到計算結果的表示式。c++ 11新規定允許將變數宣告為constexpr型別以便由編譯器來驗證變數的值是否是乙個常量表示式。宣告為constexpr的變數一定是乙個常量,而且必須用常量表示式初始化

constexpr

int mf =20;

constexpr

int limit = mf +1;

constexpr

int size =

size()

;// 只有當size是乙個constexpr函式時才能正確編譯

新標準允許定義一種特殊的constexpr函式,這種函式應該足夠簡單以使得編譯時就可以計算其結果,這樣就能用constexpr函式去初始化constexpr變數了

在資料型別中,算術型別、引用和指標都屬於字面值型別,都可以使用constexpr定義。而自定義的類、io庫、string型別不屬於字面值型別,也就不能被定義為constexpr。

乙個constexpr指標的初始值必須是nullptr或者是0,或者是儲存於某個固定位址中的物件。

在constexpr宣告中如果定義了乙個指標,限定符constexpr僅對指標有效,與指標所指的物件無關。constexpr指標既可以指向常量也可以指向乙個非常量。

using si = sales_item;

// si是sales_item的同義詞

編譯器推斷出來的auto型別有時候和初始值的型別並不完全一樣,編譯器會適當地改變結果型別使其更符合初始化規則。

auto在自動推斷const常量時,會自動去除const屬性。如果希望推斷出的auto型別是乙個const型別,需要手動指定:

const

auto f = ci;

c++ 11引入了第2種型別說明符decltype,它的作用是選擇並返回運算元的資料型別。如果decltype使用的表示式是常量,則decltype返回該變數的型別也包含const:

const

int ci =0;

decltype

(ci) x =

0;

decltype((variable))(注意是雙層括號)的結果永遠是引用

標頭檔案通常包含那些只能被定義一次的實體,如類、const和constexpr變數。

c++的標頭檔案保護定義與c的略有不同,其#ifndef的巨集最外兩側沒有_,如檔名為sales_data.h的標頭檔案:

#ifndef sales_data_h

#define sales_data_h

#include

#endif

第2章 變數和基本型別

這章要學會的 2.1 基本內建型別 2.2 字面值常量 2.3 變數 2.4 const限定符 2.5 引用 2.6 typedef 名字 2.7 列舉 2.8 類型別 型別告訴我資料代表什麼意思以及可以對資料執行哪些操作.型別確定了資料和操作在程式中的意義。c 提供了通過組合現有類產生新類的方法。...

第2章 變數和基本型別

1.算術型別 bool 取值為真或假 int 16位 65536long 32位 4 294 967 296 longlong 64位 18 446 744 073 709 551 616 int 64 64位 18 446 744 073 709 551 616 2.由單引號括起來的乙個字元稱為c...

C Primer第2章 變數和基本型別

c 定義了一套包括算術型別和空型別在內的基本資料型別。算術型別分為兩類 整型和浮點型。算術型別的尺寸在不同機器上有所差別。型別含義 最小尺寸常見 bool 布林型別 未定義 char 字元8位 wchar t 寬字元16位 char16 t unicode字元 16位 char32 t unicod...