cpp學習

2022-09-23 09:57:00 字數 4801 閱讀 2325

c++包含了一套包括算術型別和空型別在內的基本資料型別。其中算術型別包含了字元、整型數和布林值和浮點數。空型別不對應具體的值。

算術型別分為兩類:整型(包括字元和布林型別在內)和浮點型

型別含義

最小尺寸

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位有效數字

帶符號型別和無符號型別含有無符號型別的表示式

1.當一個無符號的數與另外一個數(包括有符號數和無符號數),結果是所的結果的模

2.使用無符號數來進行迴圈時,有可能造成死迴圈

3.切勿混用帶符號和無符號數

整型和浮點數

1.整型字面值的具體的資料型別由它的值和符號決定。預設情況下,十進位制字面值是帶符號數,是int,long,long long 中尺寸最小的那個,一般為int

2.八進位制和十六進位制既可能是帶符號也可能是無符號的。八進位制和十六進位制字面值的型別是能容納其數值的int,unsigned int,long,unsigned long,long long 和unsigned long long 中的尺寸最小者。

3.short沒有對應的字面值

4.預設的浮點型字面值是一個double

字元和字串字面值

1.字串字面值的型別實際上是由常量字元組成的陣列,編譯器在每個字串的結尾處加一個'\0'字元

2.如果兩個字串位置緊鄰且由空格、縮排和換行分隔

轉義序列

指定字面值的型別

字首含義型別u

unicode16字元

char16_t

uunicdoe32字元

char32_t

l寬字元

wchar_t

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

char

布林字面值和指標字面值

1.布林型別的字面值是true和false

2.nullptr是指標字面值

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

列表初始化

1.列表初始化用於內建型別的變數且存在丟失資訊的風險時,編譯器會報錯

預設初始化

1.如果定義變數沒有被指定初值,則變數被預設初始化,預設值由變數型別決定

2.如果變數定義於函式之外,則被初始化為0;定義在函式體內建型別變數將不被初始化

1.c++將宣告和定義分離開來。宣告使得名字為程式所知;定義負責建立與名字關聯的實體

2.如果想宣告一個變數而非定義它,那麼需要在變數名前加extern,而且不要顯式地初始化變數。

c++的識別符號由字母、數字和下劃線組成,其中必須以字母或者下劃線開頭,識別符號長度沒有限制,但是對大小寫字母敏感。

變數命名規範巢狀的作用域引用必須初始化。一旦初始化完成,引用將和它的初始值一直邦定在一起

引用即別名

引用的定義

引用只能繫結在物件上,而不能與字面值或某個表示式的計算結果繫結在一起。

指標和引用的區別:

獲取物件的地址 取地址符&

指標值利用指標訪問物件 *

空指標 nullptr

賦值和指標

其他指標操作

void*指標

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

指向指標的指標

指向指標的引用const物件一旦建立後其值就不能再改變,所以必須初始化。

初始化和const

預設狀態下,const物件僅在檔案內有效

為了在多個檔案中共享const變數,解決辦法是不管宣告還是定義都新增extern關鍵字

初始化和對const的引用

引用的第一種例外情況,初始化常量引用允許使用任意表示式作為初始值,只要該表示式的結果能夠轉換成引用的型別即可。尤其,允許為一個常量引用繫結非常量的物件、字面值。

對const的引用可能引用一個並非const的物件1.指向常量的指標不能用於改變其所指物件的值。要想存放常量物件的地址,只能使用指向常量的指標

2.指向常量的指標可以指向非常量物件

const指標

1.常量指標必須初始化,而且一旦初始化完成,它的值就不能變化了

1.頂層const 表示指標本身是個常量;底層const表示指標所指向的物件是一個常量

2.當執行物件的拷貝操作時,常量是頂層const還是底層const區別明顯。其中,頂層const不受什麼影響;另一方面,底層const的限制不能忽視。當執行物件的拷貝操作時,拷入和拷出的物件具有相同的底層const資格,或者兩個物件的資料型別能夠進行轉換。一般來說,非常量可以轉換成常量

3.用於宣告引用的const都是底層const

常量表示式是指值不會改變並且在編譯過程就能得到計算結果的表示式。

constexpr常量

constexpr變數一定是個常量,而且必須用產量表示式初始化

字面值型別

1.算術型別、引用和指標都屬於字面值型別;自定義型別、io庫、string型別則不屬於字面值型別

指標和constexpr1.傳統的方法是 typedef

2.別名宣告 using

如果某個型別別名指代的是複合型別或常量,那麼把它用到宣告語句就會產生意想不到的後果。

typedef char* pstring;

const pstring cstr;//這裡定義的實際上是一個常量指標,而不是一個指向指向常量的指標

1.auto在一條語句中宣告多個變數時,該語句中所有變數的初始基本資料型別都必須一樣。

複合型別、常量和auto

auto的一些規則:

1.當引用被用作初始值時,真正參與初始化的其實是引用物件的值。此時編譯器以引用物件的型別作為auto的型別

2.auto一般會忽略掉頂層const(常量指標),同時底層const 則會保留下來

3.如果希望推斷出auto型別是一個頂層const,則需要明確指出,如const auto f = ci;

4.設定一個型別為auto的引用是,初始值中的頂層常量屬性仍然保留。和往常一樣,如果我們給初始值繫結一個引用,則此時的常量(坑人呢,這個常量指的是繫結引用的常量而不是初始值的常量)就不是頂層常量了

1.如果decltype使用的表示式是一個變數,則decltype返回該變數的型別(包括頂層const和引用在內)

decltype和引用

1.如果decltype使用的表達不是一個變數,則decltype返回表示式結果對應的型別。如果表示式返回一個引用型別時,則該表示式結果物件需要作為賦值語句的左值,必須初始化。

2.如果表示式的內容是解引用操作,返回的型別得到引用型別。

3.decltype 返回的型別與表示式的形式密切相關,如果decltype使用了一個加上括號的變數,則會返回對應的引用型別;如果使用的是不加括號的型別,則會將其當作一個表示式。

類資料成員預處理概述不能拷貝io物件,因此不能將形參或者返回型別設定為流型別。進行io操作的型別通常以引用的方式傳遞和返回流

讀寫io會改變其狀態,因此傳遞和返回的引用不能是const的

io庫的條件狀態

條件狀態

描述strm::iostate

strm 是一種io型別。iostate是一種機器相關的型別,提供了表達條件狀態的完整功能

strm::badbit

strm::badbit用來指出流已崩潰

strm::failbit

strm::failbit用來指出一個io操作失效了

strm::eofbit

strm::eofbit用來指出流到達了檔案結束

strm::goodbit

strm::goodbit用來之後粗流未處於錯誤狀態,此值保證為0

一個流一旦發生錯誤,其上後續的io操作就會失敗。因此需要在使用流之前檢查它是否處於良好狀態,最簡單的辦法是將它當作條件來使用

查詢流的狀態

管理條件狀態導致緩衝重新整理的原因有很多:

重新整理輸出緩衝區

unitbuf 操縱符

關聯輸入和輸出流

tie():返回指向輸出流的指標,如果本物件當前關聯到一個輸出流,那麼返回這個流的指標

tie(&ostream)將本物件關聯到一個ostream

fstream 特有的操作

特性描述

fstream fstrm;

建立一個未繫結的檔案流,fstream 是標頭檔案中定義的一個型別

fstream fstrm(s);

建立一個fstream 開啟名為s的檔案。s可以是string型別的,或者是一個指向c風格字串的指標。這些建構函式都是explicit的,預設的檔案模式依賴於fstream的型別

fstream fstrm(s,mode);

以指定mode開啟檔案

fstrm.open(s)

開啟名為s的檔案,並將檔案與fstrm繫結。s可以是一個string 或者一個指向c風格字串的指標。預設的檔案mode依賴於fstram的指標

fstrm.close()

關閉與fstrm繫結的檔案。返回void

fstrm.is_open()

返回一個bool值,指出與fstrm關聯的檔案是否成功開啟且尚未關閉

cpp 標準庫

源 c 標準庫的所有標頭檔案都沒有副檔名。c 標準庫的內容總共在50個標準標頭檔案中定義,其中18個提供了c庫的功能。形式 的標準標頭檔案...

字元編碼 and cpp

字元 抽象的最小文字單位。僅代表符合沒有實際意義 如 , a 國 字符集 字元的集合 如gb2312, ascii unicode 編碼 是...

Hdu 1260 DP cpp

題意 知道一個人買票花的時間和和前面那個人一起買票花的時間,問最少花多少時間可以把票賣完 輸入 給出t,表示有t組樣例 給出n,表示有n個人買票 給出n個數表示這個人單獨買票會花的時間 給出n 1個數,表示這個人和前面那個人一起買票會花的時間 思路 狀態轉移方程是 dp i min dp i 1 單...