Effective C 第三版 學習筆記

2021-10-01 21:24:29 字數 2028 閱讀 6257

1.讓自己習慣c++

explicit為顯示構造說明符(僅c++)。用來控制不必要的隱式型別轉換,目前我只知道explicit用於類宣告的建構函式宣告中。

舉個栗子:

class

a;

以下宣告是合法的:

a c =1;

//等效於a c = a( 1 );

a d =

"c++"

;

如果將類的建構函式宣告為explicit,則先前的宣告將是非法的。

例如,如果將類宣告為:

class

a;

這種情況下只能分配與類型別的值匹配的值。

下面給出在這種情況下合法的陳述:

a a1;

a a2 =a(

1); a a3(1

);a a4 =a(

"venditti");

a* p =

newa(1

);a a5 =

(a)1

; a a6 =

static_cast

(1);

被宣告為explicit的建構函式通常比non-explici的更受歡迎,因為前者禁止編譯器執行非預期(可能大多情況下也不期望)的型別轉換,除非你有充分的理由允許建構函式被用於隱式型別轉換,否則就宣告成explicit即可。

c++主要的四個次語言:

class

test

;//the enum hack--令num成為5的乙個記號名稱。

int myarray[num]

;//這樣就沒問題了。

}

用#define定義的形似函式的巨集在閱讀時會讓人十分痛苦,最好改用 inline 函式替換#defines。

有了 consts、enums和 inlines,我們對預處理器(特別是#define)的需求降低了,但並不是完全消除。#include 仍是必需品,而 #ifdef / #ifndef 也繼續扮演控制編譯的重要角色。

class

rational

;const rational opeartor*

(const rational& lhs,

const rational& rhs)

;

用來防止使用者進行這樣的行為:

rational a,b,c;

if (a * b = c)//可能只是想做一次比較,打錯了

···

永遠在使用物件前先將它初始化

不要混淆賦值(assignment)和初始化(initialization)

abentry::

abentry

(const std::string &name,

const std::string &address,

const std::list

&phones)

在 abentry 建構函式內,三個變數均為被賦值,而不是進行初始化,初始化發生在 default 建構函式內。對此可採用乙個較佳的建構函式寫法:使用成員初始列

abentry::

abentry

(const std::string &name,

const std::string &address,

const std::list

&phones)

:thename

(name)

,theaddress

(address)

,thephones

(phones)

,//numtimesconsulted(0)

class 的成員變數初始化次序是按照宣告的次序來的,與初始化列表中的順序無關。

編譯apue 第三版

想要直接使用作者提供的源 就需要編譯下,這個檔名是src.3e.tar.gz 很簡單的幾步就搞定了.解壓src.3e.tar.gz 進入apue.3e make 進入apue.3e lib目錄,複製libapue.a到 usr local lib目錄 進入 apue.3e include目錄,複製 ...

UnixShell程式設計 第三版

這本書相當老了,04年的,現在 在linux上做實驗。1,date 顯示日期。2,who 顯示使用者,who am i 3,echo 後面字串會全部輸出,會過濾掉多餘空格,單雙引號,分號等。4,ls 列出檔案。5,cat 檢視檔案。6,wc 檔名,第乙個數字是檔案行數,第二個數字是檔案單詞書,第三個...

CSS權威指南(第三版)

很早就買了這本書,之前都是斷斷續續地看,前段時間總算是花時間系統的把它看了一遍。嚴格的說是第二次才把這本書系統的看完,之前是因為很多知識點看不懂,所以沒有系統看。雖然這一次也有好多知識點沒有看懂。但是每一次看這本書總有不一樣的收穫,因為每一次你都在提高,我想這本書會一直陪伴著我。這本書講的非常通俗,...