C++ Primer 第五版:第2章

來源:互聯網
上載者:User

標籤:

*****C++ Primer 第五版第2章學習筆記*****

*****實驗代碼在Red Hat 6.6或VS 2013中調試*****

*****文章內容依據當前知識撰寫,存在認識的局限性*****

 

今天學習C++ Primer 的第2章,還沒有看完,先寫一點看書的心得和筆記。

物件類型決定對象包含的資料和能參與的運算操作,同時還決定了儲存空間大小。
算術運算式中不要使用char,因為不同機器實現不一樣,導致結果不同。
單精確度計算不一定比雙精確度快。

C++類型不符時,是自動進行類型的轉換。

C++的變數初始化有四種方式:

1.int a=0;

2.int a={0};

3.int a{0};

4.int a(0);

使用花括弧初始設定變數的方式稱為:列表初始化。

對內建類型使用列表初始化去初始化一個值,且2者類型不通,存在丟失資訊的風險,列表初始化將無法完成,例如:

long double a=3.1415926;

int b{a};  //編譯報錯,無法完成。

 

如果定義變數時沒有指定初值,則變數被預設初始化(default initialized),此時變數被賦予了"預設值"。預設值到底是什麼由變數類型決定,同時定義變數的位置也會對此有影響。

如果是內建類型的變數未被顯式初始化,它的值由定義的位置決定。定義於任何函數體之外的變數被初始化為0。然而一種例外情況是,定義在函數體內部的內建類型變數將不被初始化(uninitialized)。一個未被初始化的內建類型變數的值是未定義的,如果試圖拷貝或以其他形式訪問此類值將引發錯誤。

每個類各自決定其初始化對象的方式。而且,是否允許不經初始化就定義對象也由類自己決定。如果類允許這種行為,它將決定對象的初始值到底是什麼。

上面這段話講的內容挺多,學過C語言的朋友應該能知道,這段話和變數的範圍是有很大關聯的:

其中靜態變數只初始化一次,未顯式初始化時,預設初始化為0,這就是為什麼【定義於任何函數體之外的變數被初始化為0】的原因。PS: 靜態變數和外部變數在程式調入記憶體時已準備就緒。  另外,C++不同於C,如果內建類型的局部變數沒有被初始化,是不能以任何方式訪問,包括輸出和複製,VS2013編譯時間會報錯!  最後,從課本上學習到的一點就是:不要使用未初始化的對象! C++是一種靜態類型(statically typed)語言。 定義引用時,程式把引用和它的初始值綁定(bind)在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和它的初始值對象一直綁定在一起。因為無法令引用重新綁定到另外一個對象,因此引用必須初始化。 因為引用本身不是一個對象,所以不能定義引用的引用。這句話是什麼意思呢?舉個例子: int  c; int  &b=c; int  &a=b ;   //a成為另一個c的引用. int  &&d=b;  //這裡即體現了引用(&d)的引用(&&d), 

指標值

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

1.指向一個對象。

2.指向緊鄰對象所佔空間的下一個位置。  //這種我沒理解什麼意思,搜尋了一下,發現有篇文章解釋是int *p = &i ;   p++;

3.null 指標,意味著指標沒有指向任何對象。

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

另外,為初始化的指標是極度危險的。 

只要指標擁有一個合法值,就能將它用在條件運算式中。和採用算術值作為條件(參
見2.1.2 節,第35 頁)遵循的規則類似,如果指標的值是0,條件取false:
int ival = 1024;
int *pi = 0; // pi 合法,是一個null 指標
int *pi2 = &ival; // pi2 是一個合法的指標,存放著ival 的地址
if (pi) // pi 的值是0,因此條件的值是false
if (pi2) // pi2 指向ival,因此它的值不是0,條件的值是true

這裡的if (pi)   pi 的值是0,因此條件的值是false,起初覺得這是否是錯誤的用法,pi是個指標,其值是一個地址,不可能拿來做bool判斷,後來在群裡求教了下,一個大蝦給了指點,其實if ( pi )是與if ( pi != NULL )等價的,好好思考下是不是這樣呢:D,是的,兩者是等價的,故判斷的結果是false。 最後還要說一下第一章的一個while迴圈的知識點,在做第一章的練習題時,我看到了這樣一段代碼
while (a>b)  if(m>n)    ....;  else    ....;

上面這段代碼while迴圈後跟了if,else,並且while迴圈體沒有加花括弧,那麼while迴圈體是到哪為止呢,我之前不理解,一直以為到第一個分號截止,直到看到這段代碼,才知道if...else...這段代碼是看作一個整體,因此上面的都是while迴圈。

 

暫時寫到這,待續。

繼續:不能定義指向引用的指標

 

C++ Primer 第五版:第2章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.