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