摘要: C++ARM中解釋說type-safe linkage并不能100%的保證類型安全。既然它不那100%的保證類型安全,那么它就肯定是不安全的。統(tǒng)計分析顯示:即便在很苛刻的情況下,C++ 出現(xiàn)單獨(dú)的O-ring錯誤的可能性也只有0.3%。但我們一旦將6種這樣的可能導(dǎo)致出錯的情況聯(lián)合起來放在一起,出錯的幾率就變得大為可觀了。在軟件中,我們經(jīng)常能夠看到一些錯誤的起因就是其怪異的聯(lián)合。OO的一個主要目的就是要減少這種奇怪的聯(lián)合出現(xiàn)。
閱讀全文
摘要: 【P&S 94】中提到對于類型安全的檢測來說有兩種假設(shè)。一種是封閉式環(huán)境下的假設(shè),此時程序中的各個部分在編譯期間就能被確定,然后我們可以對于整個程序來進(jìn)行類型檢測。另一種是開放式環(huán)境下的假設(shè),此時對于類型的檢測是在單獨(dú)的模塊中進(jìn)行的。對于實(shí)際開發(fā)和建立原型來說,第二種假設(shè)顯得十分有效。然而,【P&S 94】中又提到,“當(dāng)一種已經(jīng)完成的軟件產(chǎn)品到達(dá)了成熟期時,采用封閉式環(huán)境下的假設(shè)就可以被考慮了,因為這樣可以使得一些比較高級的編譯技術(shù)得以有了用武之處。只有在整個程序都被了解的情況下,我們才可能在其上面執(zhí)行諸如全局寄存器分配、程序流程分析及無效代碼檢測等動作。”(附:【P&S 94】Jens Palsberg and Michael I. Schwartzbach, Object-Oriented Type Systems, Wiley 1994)。
閱讀全文
摘要: 在所有對C++的批評中,虛擬函數(shù)這一部分是最復(fù)雜的。這主要是由于C++中復(fù)雜的機(jī)制所引起的。雖然本篇文章認(rèn)為多態(tài)(polymorphism)是實(shí)現(xiàn)面向?qū)ο缶幊蹋∣OP)的關(guān)鍵特性,但還是請你不要對此觀點(diǎn)(即虛擬函數(shù)機(jī)制是C++中的一大敗筆)感到有什么不安,繼續(xù)看下去,如果你僅僅想知道一個大概的話,那么你也可以跳過此節(jié)。【譯者注:建議大家還是看看這節(jié)會比較好】
在C++中,當(dāng)子類改寫/重定義(override/redefine)了在父類中定義了的函數(shù)時,關(guān)鍵字virtual使得該函數(shù)具有了多態(tài)性,但是 virtual關(guān)鍵字也并不是必不可少的(只要在父類中被定義一次就行了)。編譯器通過產(chǎn)生動態(tài)分配(dynamic dispatch)的方式來實(shí)現(xiàn)真正的多態(tài)函數(shù)調(diào)用。
閱讀全文
摘要: 算起來,我用Visual C++也有將近5年的歷史了。在這期間,我也曾涉獵過Visual Basic和Delphi,但都是淺嘗而止;Visual C++始終是我的主業(yè)。可是努力的成果如何呢?我用Delphi作出了十多個有規(guī)模的軟件,用VB--雖然我用在VB上的時間只有短短的兩三個月--也有兩個像樣的項目;然而,在我付出了最大熱情和最多努力的Visual C++上面,卻只作出了三個自己看得上眼的軟件。
閱讀全文
摘要: 聲音內(nèi)核為快速和容易地將聲音和音樂加入到游戲中提供了一種解決方案,聲音內(nèi)核包含6個類組件。
閱讀全文
摘要: 音樂就是一系列的音符,這些音符在不同的時間用不同的幅度被播放或者停止。有非常多的指令被用來播放音樂,但是這些指令的操作基本相同,都在使用各種各樣不同的音符。在計算機(jī)上進(jìn)行作曲,實(shí)際上是存儲了很多組音樂,回放時由音頻硬件將這些音符播放出來。
閱讀全文
今天看代碼時,發(fā)現(xiàn)一個有用的東東,offsetof(s,m),這是一個宏,MSDN文檔的說明如下:
Retrieves the offset of a member
from the beginning of its parent structure.
size_t offsetof(
structName,
memberName
);
Parameters
structName
Name of the parent data structure.
memberName
Name of the member in the parent data structure for which to determine the
offset.
Return Value
offsetof returns the offset in bytes of the specified member from the beginning
of its parent data structure. It is undefined for bit fields.
Remarks
The offsetof macro returns the offset in bytes of memberName from the beginning
of the structure specified by structName. You can specify types with the struct
keyword.
Note
offsetof is not a function and cannot be described using a C prototype.
跟蹤代碼發(fā)現(xiàn)定義如下:
#define offsetof(s,m) (size_t)&(((s *)0)->m)
然后到網(wǎng)上查了一下,發(fā)現(xiàn)還真的是很有用,附帶一位大俠的解說:
struct AAA
{
int i;
int j;
};
struct AAA *pAAA;
pAAA=new AAA;
這時,pAAA實(shí)際上是一個Pointer, 指向某一確定的內(nèi)存地址,比如0x1234;
而 pAAA->i 整體是一個int型變量,其地址是&(pAAA->i) ,'&'為取址運(yùn)算符;
那么&(pAAA->i)一定等于0x1234,因為i是結(jié)構(gòu)體AAA的第一個元素。
而&(pAAA->j)一定是0x1234 + 0x4 = 0x1238; 因為sizeof(int) = 4;
這個做法的巧妙之處就是:它把“0”作為上例中的pAAA,那么 &(pAAA->j)就是j的offset啦。
解析結(jié)果是:
(s *)0 ,將 0 強(qiáng)制轉(zhuǎn)換為Pointer to "s"
可以記 pS = (s *)0 ,pS是指向s的指針,它的值是0;
那么pS->m就是m這個元素了,而&(pS->m)就是m的地址,而在本例中就是offset啦
再把結(jié)果強(qiáng)制轉(zhuǎn)換為size_t型的就OK 了,size_t其實(shí)也就是int啦!!
也就是說:
0 ---> (s *)0
原來的0是數(shù)值類型,現(xiàn)在是結(jié)構(gòu)體指針類型,盡管類型變了,但其值還是不變,也就是說還是0,但這個值的意義變了,現(xiàn)在是地址,而不是數(shù)值。
&(((s *)0)->m)求出字段m的地址值,但由于首地址是0,所以&(((s *)0)->m)求出字段m相對于首地址的偏移值。
摘要: 通過鍵盤、鼠標(biāo)和游戲桿,輸入內(nèi)核提供了一種手段,使玩家能夠同游戲進(jìn)行交互。使用兩個簡單的類:INPUT和INPUT_DEVICE產(chǎn)生輸入設(shè)備。 INPUT類用來初始化DirectInput,而INPUT_DEVICE類用來包含一個DirectInput設(shè)備接口對象。如果要使用多個設(shè)備,需要對每個設(shè)備使用單獨(dú)的INPUT_DEVICE對象。
閱讀全文
搬了家,這個小區(qū)比較安靜,晚上睡覺沒有那么吵了,不過沒有電信寬帶,只能通過ADSL上網(wǎng)。
平時瀏覽網(wǎng)頁什么的速度還可以,但速度還是比不上小區(qū)寬帶,主要就是下載太慢了,用迅雷下載最快也就200多k,如果用電信的局域網(wǎng)小區(qū)寬帶下載,最快每秒可以接近2M。
現(xiàn)在慘了,上優(yōu)酷網(wǎng)看視頻變得很不流暢了,帶寬不夠。
好多東西要收拾,光是書就有三大袋,殘念……,算是一個典型的書呆子了,書倒是一堆,看完的沒幾本。
還有衣服,棉被,電腦桌椅,臺式機(jī),以及其他雜七雜八的。。。
每次搬家總是很不情愿,似乎在一個地方住久了就會產(chǎn)生感情,另一個重要的原因就是東西比較多,收拾搬動都很麻煩。
而每次搬家內(nèi)心總是有很多感慨,總有一股淡淡的憂愁和失落,于是我的電腦里就不停地播放亞亞的歌聲,只有亞亞的歌聲能讓我的心情平復(fù)。
天知道沒有你,遠(yuǎn)方會變成怎么樣。 ------- 《秋天的眼淚》