整理日期 2001/10/31
我對讀者來信的回應與整理,一方面是自己留個記錄,一方面
竊自以為對其他讀者容或有點參考價值。所以依序整理下來。
為保障讀者隱私,所有來信一律隱其名,隱其址。曾經特別
囑咐我不要公開者, 當然也不予公開.

傳送日期: 2001年10月2日 PM 06:42
侯先生﹕
你好﹖不知你最近工作忙嗎﹖身體好嗎﹖
我于今年買了你的一本《深入淺出MFC 2/E》﹐後來又從網上下載了你的電子版的《深入??FC 2/E》繁體版﹐我覺得你的書非常好﹐雖然我剛剛接觸﹐但好與壞我還是能分辨的。
居住省份﹕山西省太原市
希望你能出更多好書﹗



傳送日期: 2001年10月2日 PM 06:41
jjhou:
我在拜讀你的<<深度探索c++對象模型>>中有一點疑問﹐在P112-P115中的multiple
inheritance的地址
轉換有疑惑﹐便編了一段程序﹕
#include<iostream.h>
class base1
{
};
class base2
{
};

class derived2:public virtual base2
{
};
class derived1:public virtual base1
{
};
class surderived1:public derived2,derived1
{
};
void main()
{ base1 ba;
base2 bb;
derived1 b,*ptrb=NULL;
derived2 c,*ptrc=NULL;
surderived1 a;
cout<<"base1:"<<&ba<<endl<<"base2:"<<&bb<<endl;

cout<<"surderived1:"<<&a<<endl<<"derived1:"<<&b<<endl<<"derived2:"<<&c<<endl;

ptrc=&a;
cout<<"ptrb:"<<ptrb<<endl<<"ptrc:"<<ptrc;
}

輸出結果為﹕

base1:0x0012FF7C
base2:0x0012FF78
surderived1:0x0012FF5C
derived1:0x0012FF74
derived2:0x0012FF6C
ptrb:0x00000000
ptrc:0x0012FF5C

當surderived1中的derived2在derived1之前時﹐以上程序能正常運行﹗
正如lippman在<<深度探索c++對象模型>>對“ptrc=&a﹔”作以下解釋﹕

ptrc=(derived2 *)(((char *)&a+sizeof(derived2))); //P114;

我又將"ptrc=&a"改為﹕"ptrb=&a",我推算的編譯器的內部代碼為﹕

ptrb=(derived1 *)(((char *)&a+sizeof(derived1)));

但是卻編譯通不過。如果非要改成“ptrb=&a"﹐則surderived1的聲明就得改為﹕

surderived1:public derived1,derived2

輸出結果為﹕

base1:0x0012FF7C
base2:0x0012FF78
surderived1:0x0012FF5C
derived1:0x0012FF74
derived2:0x0012FF6C
ptrb:0x0012FF5C
ptrc:0x00000000

地址沒發生變化﹐但卻通過了﹗我用的是vc6.0﹔
這是為什麼﹖
多謝﹗﹗﹗

 

傳送日期: 2001年10月2日 AM 11:00
候捷先生﹐您好﹗

我在閱讀您翻譯的《Inside The C++ Object Model》一書簡體中文版時﹐有一些疑問﹐
很冒昧地寫信給您﹐希望得到您的解答。

在書中P66提到的“編譯器層面做優化”中﹐對NRV優化的適用範圍我有些不理解。按Lippman所說﹐必須有一個inline copy constructor﹐編譯器才會激活NRV優化﹐這是為什麼呢﹖因為以我的理解﹐NRV優化的目的就是消去在被調用函數中的局部對象構造與複製兩個操作﹐為什麼這裡要強調此對象必須有拷貝構造函數﹖而進行NRV優化的結果是﹐只有一次對象構造操作﹐然後直接對此對象進行處理、返回﹐不存在拷貝構造操作的必要啊﹖

另外您在書中譯注裡提到在VC5裡﹐加上inline copy constructor後也不會實施NRV優化﹐
我在VC6裡測試了一下﹐發現缺省優化方式的確不會進行NRV優化。必須將Project Setting對話框中C/C++頁的Optimizations類型裡的Inline function expansion選為Any Suitable(不知VC5裡是否有對應選項)﹐VC才會對這種情況進行NRV優化(我以彙編方式跟蹤進函數﹐發現的確沒有進行多餘的構造和拷貝構造操作﹐也就是說的確進行了NRV優化)﹐執行時間減少了一半以上(具體測試結果請見附件)。

但這又出現了一個問題﹐就是VC6只對沒有拷貝構造函數的情況進行NRV優化﹐與Lippman的說法恰好相反這個測試結果使我更加迷惑。不知是Lippman說法有局限性﹐還是VC自己實現選擇了不同的思路﹖期待您的指教。

祝中秋佳節快樂﹗

btw:附件裡是Excel格式的測試結果﹐和我測試用的工程文件

NRV 優化效果測試

有拷貝構造函數 無拷貝構造函數
測試值 平均值 測試值 平均值
Only __inline Default 7161 7180 7170 7170 8172 8181 8172 8175
Max Speed 6299 6309 6309 6305 6259 6279 6289 6275
Min Size 6840 6860 6850 6850 6699 6720 6750 6723
All Suitable Default 7170 7151 7201 7174 8162 8122 8172 8152
Max Speed 50 50 50 50 50 50 50 50
Min Size 7161 7030 6970 7053 3024 2994 3004 3007

測試環境﹕K7-850﹐中文Win2K+sp2﹐VC6+sp5 單位﹕毫秒

注﹕All Suitable + Max Speed方式的優化下﹐整個foo函數都被嵌入for循環﹐且其間的類構造操作都被優化掉﹐只是進行了浮點數運算而已﹐因此只有50毫秒。VC的優化水平還是很不錯的。

 

 

傳送日期: 2001年10月2日 PM 01:22
居住省份﹕西安
對侯捷的建議﹕
我是Vc初學者﹐只是略懂皮毛。我最近才看到先生的電子版圖書﹐覺得寫得很是透徹﹐與大陸那些大同小異的、簡單的抄幾個程序然後只是從表面上加以描述﹐而未有絲毫的深入核心的寫法有徹底的不同﹐感謝您為我們Vc學習者寫出這麼好參考書。

 

 

 

傳送日期: 2001年10月2日 PM 01:18
侯老師:
C++ Primer 3/e 從去年中至今,從台中華彩等大書局,一直到雲林偏遠地區書局,一直無法找到此書,而現在出版題解令人不解,沒有書解答何用?
況且這學期系上指定此本為教科書,希望侯老師能夠幫忙反映此問題,謝謝您


●侯捷回覆:「從去年中至今」,喔,顯然 GOTOP眳p的鋪書,還要再加把勁兒 :)
我已將您這封信轉給 GOTOP,謝謝您。

《C++ Primer 3e》近兩三個月來嚴重缺書,因為我們正在製作 2001 修訂版,將過去發現的勘誤全部修正。GOTOP 的庫存早就是 0 了。我想應該快要全面供書了。讀者跑遍多處買不到書,的確會有許多怨氣,我了解,我了解。

 

 


傳送日期: 2001年10月2日 PM 04:10
侯俊杰先生﹕
你好﹗
我在昨天剛剛買了你的《ESSENTIAL C++》﹐真是一本在IT圖書市場難得一見的好書﹗

 

 

傳送日期: 2001年10月3日 AM 02:14
主旨: Re: Class Template Partial Specialization是否可以只針對某一Class Member?

侯先生您好:

其實上次我會問這個問題是因為您的譯作C++ Primer中文版所提到的partial specialization
只於class template,而使用BCB5測試結果是編譯錯誤。但是我不能確定是語法寫錯還是編譯器不支援,或是C++壓根就沒這種語法,所以才想確認一下。前篇交待不全之處,尚請見諒。以您的回信來看,既然Primer沒提到應該就是沒有了。

這次我有個function template的問題想要請教您。如有下列一class template及兩多載化 function template:

template <int N, typename T>
class C
{
};

template <int N, typename T>
void foo(C<N, T> , C<N+1, T>) {}

template <typename T>
void foo(C<1, T> , C<2, T>) {}

對於以下兩次呼叫

foo(C<2, int>(), C<3, int>()); // ok
foo(C<1, int>(), C<2, int>()); // ambiguous!!

後者編譯器會發出ambiguous的錯誤訊息

請問若以Standard C++語法而言,這個呼叫應為ambiguous嗎?還是編譯器的缺失呢?

P.S. 我很喜歡具現化這個譯名,聽起來亂炫一把的。

●侯捷回覆:如果你是編譯器,你有沒有辦法查知
foo(C<1, int>(), C<2, int>()) 究竟是呼叫:
template <int N, typename T>
void foo(C<N, T> , C<N+1, T>) {}
或是呼叫:
template <typename T>
void foo(C<1, T> , C<2, T>) {}
呢?你會發現(認為)兩個候選者一樣好,因此你必然會做出ambiguous的判斷。這是C++Standard的規範,任何編譯器都是這種表現。

我希望,問問題時,能夠自己先想一想,並把你的想法告訴我,這樣對你有好處,也會吸引我回答你的問題。不要害怕自己的想法可笑或錯誤 — 誰知道你是誰呢?就算你告訴了我你的名字,我也不知道你是誰。而且我的公開回覆絕不會透露讀者身份,你放心 :)

 

 

 

傳送日期: 2001年10月3日 PM 03:44
俊杰先生:
您好.
先生免費開放的電子書籍<Windows 95 系統程式設計大奧秘>&<Windows 95 系統程式設計 – 虛擬機器與 VxD 程式設計>、<深入淺出 MFC>、<深度探索 C++對象模型>(部份)我有下載﹐購買有後兩本書的簡體中文版。且打印了前兩本書﹐
不知該如何付費﹖

能讓讀者不僅知其然﹐而且知其所以然的書籍﹐總讓人拍手叫好。我沒有上過大學﹐深知初學盲人摸象之苦。先生的書正是指引我輩的明燈。祝快樂﹗
居住省份﹕重慶市
對侯捷的建議﹕小子無知﹐願博先生一笑耳﹕1、竊以為先生
譯作可加入您更多的看法和認識。描述精彩細節時更可天馬行空﹐如﹕不足和優勢﹐其技術的前導﹐後續發展。及其技術的相關性﹐如﹕複合文檔和數據庫。2、希望先生能寫一本 C 語言的發展史

●侯捷回覆:既然免費開放,就是無需付費,你很可愛。

你對譯作的建議很好,但我會在我的著作中做這些事情。

C語言發展史?我沒有興趣成為它的作者,但我很有興趣成為它的讀者。

 

 

 

傳送日期: 2001年10月3日 PM 06:51
Dear Sir:
一些生活中的平常事﹐說來起來倒也很有意思﹐上個月的一天﹐完成了工作﹐我打了個誑﹐未到下班時間想就溜回家﹐臨走時﹐同事對我說﹕嗨﹐小心ぴ點﹐別騎到半路上下場大雨。也巧﹐嘗行未到十分鐘﹐雨象變戲法似的真掉下來了﹐沒辦法﹐只好躲進書店避一避﹐我是常去書店的﹐每月為數不多的一點銀子總要花在買書上不少﹐你也知道現在有關計算機的書都不便宜﹐我在堆滿諸如C++探密、21天學會VC之類的書架上翻到了一本講MFC的書(也就是深入淺出MFC SE)﹐
最初我看到的是關於讀者的來信﹐心想這個AUTHOR也太拽了吧﹐簡單看了看內容後﹐我決定(其實我是咬了咬牙)把它買回家﹐因為這本書回答了我好長時間來想知道而有沒辦法搞懂的許多關於WINDOWS編程的原理(我是一個想知道原理比想知道應用更多得多的人﹐哈哈討厭吧)﹐抑制不住內心的興奮﹐我連夜看了半本﹐果然感覺真是久違了﹐我早干嘛去了﹐人家早幾年前就出版了﹐相逢恨晚哪﹗

看這本書對我來說是出奇的順利(我原本覺得憑我的水平要看完可能不是那麼簡單)﹐這得益與書中不溫不火的講解﹐恰到好處。

它適合我這種原本一知半解的人看﹐我猜第一篇第三章MFC仿真也許是您的教學精華吧﹐我也嘗試過用甚至是最原始的C語言去模仿C++的WINDOWS編程機製(不用說我到現在連一句也沒能寫出來﹐因為我不懂﹐猶如瞎子在一間很大且摸不著牆的房子裡﹐可憐我半年前還在VC6的大屋子裡滿世界找WinMain函數的下落, 說真的﹐我可能是先生讀者群裡最菜的哪撥)﹐這使我想起了以前聽過的一個事例﹐如何教會小學生高等數學呢﹐我想MFC仿真便回答了這個問題(這種教學方法只有對所教課題有著無比深入的了解的人才能幹得起來)。也許學習類似WINDOWS編程這樣的內容﹐需要用更好的方法﹐對於這本書既見森林又見樹木﹐既形而上又形而下的講法會令人更容易從整體上、基礎上接受這些複雜難纏的內容。

我想﹐我沒有看到任何一本由華人寫的技術書籍能向這本書一樣具有文化氣質(我指的是文學方面)﹐我常嘆息為什麼印有中國人名字的計算機書籍總是寫的沒外國人好﹐這下﹐我得改變看法了﹐再次感謝先生及深入淺出MFC﹐我已有所得﹐希望能常常得到先生的指點﹐對於我來說這將是艱苦學習中最值得期待的了。如果先生允許的話﹐希望下次先生能回答我一些計算機方面的其他問題。

祝﹕身體健康﹐工作順利

●侯捷回覆:我也是一個
想知道原理比想知道應用更多得多的人,我從來沒有因此被人討厭過 :)。《深入淺出MFC》的確非常適合原本一知半解的人看,會有最大的邊際效果。

為什麼大家看到書籍的讀者來函,就會「心想這個AUTHOR也太拽了吧」呢?我不認為身為一個作者,就必須低三下四,自抑謙「卑」。讀者來函對一本書籍的讚美,是作者的榮耀。也是對這本書的肯定,我很樂意大聲說出來,並給予初謀面的讀者一個導引。我確實認為,讀者對《深入淺出MFC》的熱愛,我當之無愧,因為我是如此用心地寫這本書,而它在MFC技術剖析上又是有如此獨特的地位。我用心寫作,就是要獲得尊敬,獲得肯定。

坦誠告訴各位,我的每一本書,在我的定位範圍內和我的論述方式上,我永遠認為它是全世界第一流的 — 我何必寫一本二流書籍。一個作家如果沒有這種氣勢,如果在別人請求推薦書籍時他竟然不敢推薦自己的書籍,我以為,他沒有成為好作家的條件。

做人要謙虛,做事要有氣勢。

任何人別想在侯捷身上看到傲慢氣息,可也別想在侯捷作品上看到無端的自抑與謙「卑」:)

 

 

 

傳送日期: 2001年10月3日 PM 10:08
侯老師﹕
冒昧打擾﹐很幸運能在網上找到您的網站﹐但﹐也很遺憾沒有更早得找到您的網站。

很敬佩您學識淵博﹐如此精深的專業知識已很難得﹐而您的知識面又如此的廣博。(不是我不用“博大精深”﹐只是您不接受 ﹕))更難得的是您的人生修養和時時保持的那份謙虛。您在學習技術時不忘修身養性(能夠堅持寫書評就是證明)﹐而我們只顧沒頭沒腦得跟著潮流學習新技術﹐您可為楷模。“修身﹐養性﹐格物﹐致知“我一直認為養性是很重要的﹐可是整日忙忙碌碌靜不下心﹐大學校園又如此浮躁﹐興趣和熱情正在漸消漸無﹐不過既然我知道﹐我就會想辦法調整我自己﹐畢竟我現在只是大三﹐我想我能夠靜下心﹐認認真真得學些知識。

雖然大陸買不到您推薦的愈多好書﹐但能受到您的教誨已收益不淺。
遺憾的是﹐我不是計算機系的學生﹐我正在備考計算機系的研﹐真是很忙。
真是很感謝您的教誨﹐不僅僅是學習方法﹐更重要的是學習的心態和人生的態度。
“寧繁勿簡﹐寧遠勿近”(後面的不記得了)﹐真是很感謝您。

●侯捷回覆:
『寧繁勿略,寧遠勿近,寧下勿高,寧拙勿巧』— 朱熹

 

 

傳送日期: 2001年10月4日 AM 12:00
侯老師﹐您好﹗
謝謝你為我們提供了 《深入淺出 MFC》 2/e 的電子版的免費
下載﹗以下是我的基本資料﹕
居住省份﹕湖北
對侯捷的建議﹕是否能給我們尋找並翻譯些下一代Internet的技術方向----網格(Grid)技術的書籍和資料﹗我個人認為這個以後會是網絡真正的重要方向﹗
  

 

 

傳送日期: 2001年10月4日 PM 06:14
主旨: Typo report
侯 Sir 您好:

thinking-in-java-20010919.pdf 檔案中第 213 頁,

Math.random() 的輸出包括0.0,以數學術語來說,其輸
出範圍是[0,1]。

其中輸出範圍應是 [0,1) 才對.

另外, 在檔案第 104 頁:

名詞可以關聯至參與者、use case 中的脈絡(例如大廳)、或是在此use case 中被操作的人工製品。動詞則可關聯到介於參與者與use case 之間的互動關係,並指出use case中的諸多步驟。

其中 "關聯" 一詞在原書中為 suggest. 在此譯為 "關聯",
沒看過英文版的讀者可能無法馬上了解這句的意思
(像我就是一路順暢地讀到這忽然卡住, 找出英文版兩相
比照之下才了解作者的意思). 另外, 此處 context 譯為 "脈絡"
似乎也略嫌不妥, 不知您是否也這樣覺得?

不過總體來說, 這本書翻得很好, 文筆流暢, 讓我能很快地吸收,
感謝您再次為中文讀者譯出一本好書!

●侯捷回覆:感謝這位讀者。我對這樣的良性互動,非常開心。
(1) 的確應為 [0,1),下一個版本更正。
(2) 更改如下,歡迎再提意見,謝謝。

名詞可用以提示參與者、use case 中的環境(context,如上例之大廳)、 或是在此 use case 中被操作的人工製品。動詞則可用以提示介於參與者與use case 之間的互動關係,並指出use case 中的諸多步驟。

 

 

 

傳送日期: 2001年10月4日 PM 06:50
侯老師﹕您好﹗

獲悉您將在10月中旬來北京幾天﹐我們熱忱地希望您能來北京師範大學做一次演講。我們
知道這樣的請求實在有些冒昧﹐但我們的心是真誠的。同學們也盼望您的到來。

我們是北京師範大學PC學社﹐我們學校很多同學(電子信息系/計算機系/物理系/數學系
等等)都很仰慕您的大名。您的著作與譯作在學校旁邊的電子科技書店中的銷路總是最好的﹐《深入淺出MFC 2/e》、《Essential C++ 簡體中文版》一上架就銷售一空(後者幾乎成了學習C++的同學的必備教科書﹐人手一冊)﹐《深度探索C++對象模型》的銷路也不錯﹐相信《Effective C++ 2e簡體中文版》的銷路會更好。如果您願意來我們學校﹐演講的題目、時間和聽課人數由您控制﹐我們負責您的交通與餐飲(您不用負擔任何費用)。

如果您來北師大演講﹐相信週圍的大學(如北京郵電大學、北京理工大學、北京航空航天
大學等高校)的同學都會幕名而來的。

我們向您發出誠摯的邀請﹐期待ぴ您的答復。此致

敬禮﹗

北京師範大學 PC學社
□□,   □□ 敬上
2001年10月4日

●侯捷回覆:

我很開心接到兩位的邀請。但因已有同學正在籌劃清華大學的演講,目前情況尚未明確(包
括日期),所以我無法答應兩位的邀請。並非我個人厚此薄彼,而是因為我在北京的時間不
長,中間又卡了個週末週日,幾乎已經沒有時間從事另一場演講了。所以請容我誠懇地向兩
位說「抱歉」。

如果清華大學的演講如期舉辦,歡迎來清華大學見面。並歡迎於會後找我,我記下了兩位的
大名 :)


侯老師﹕你好﹗
首先感謝您在百忙之中給我們回信。您不能來我們學校演講﹐我們覺得很遺憾﹐畢竟這樣的
機會是很難遇上的。希望下次我們有幸能邀請到您。
我們都盼望著能在您清華演講那天見您一面。望您的北京之行順利﹐一路順風。
謝謝﹗□□  敬上


 

傳送日期: 2001年10月5日 PM 02:49
以下是我的個人資料﹕
學校﹕南京理工大學計算機系
居住地﹕江蘇.南京
建議﹕希望侯先生能早出新書﹐而且﹐早點提供電子版﹐呵呵﹐誰讓本人是窮學生呢﹖


 

傳送日期: 2001年10月5日 PM 09:44
侯老師﹕您好﹗
我是個計算機專業的大陸學生﹐在這邊可以經常看到您的書作﹐我知道要翻譯好一本書不僅要有很好的技術功底﹐而且要有很好的文學素養﹐您在這方面做得很好了。(算是對您的恭維吧﹗﹗)
在程序設計方面我比較偏重算法的研究上﹐我很早就聽說有本書叫《the art of computer programing>> 是Donald Ervin Knuth 寫的﹐
也算是經典了吧﹐可是苦于大陸沒有這本書的簡體版買﹐不知道在台灣那邊有沒有這本書的翻譯﹐如果有我可以買到嗎﹖假如沒有的話﹐您有沒有打算翻譯它呢﹖

●侯捷回覆:「也算是經典了吧」,喔,那本書如果不算經典,就沒有哪本書能說是經典:)
臺灣沒有譯本。我沒有興趣也沒有足夠的能力翻譯這本書 :)

 



傳送日期: 2001年10月5日 PM 11:46
主旨: 一些關於static 的問題
> 侯老師您好:
>
> 我最近在看你的深入淺出MFC 2nd
> 有一些問題想要請教一下
>
> 在p136 mfc.cpp 中
>
> 0001 #include "my.h" // it should be mfc.h, but for CMyWinApp definition,so...
> 0002
> 0003 extern CMyWinApp theApp;
> 0004
> 0005 static char szCObject[] = "CObject";
> 0006 struct CRuntimeClass CObject::classCObject =
> 0007 { szCObject, sizeof(CObject), 0xffff, NULL, NULL };
> 0008 static AFX_CLASSINIT _init_CObject(&CObject::classCObject);
> 0009
> 0010 CRuntimeClass* CRuntimeClass::pFirstClass = NULL;
> 0011
> 0012 AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)
> 0013 {
> 0014 pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;
> 0015 CRuntimeClass::pFirstClass = pNewClass;
> 0016 }
> 0017
>
> 第8行 的 static AFX_CLASSINIT _init_CObject(&CObject::classCObject);
> 執行時會呼叫 AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass* pNewClass)這
> 個函式
>
> 而這個函式裡面會使用 CRuntimeClass* CRuntimeClass::pFirstClass 這個靜態
> 成員,但是在第8行時 CRuntimeClass* CRuntimeClass::pFirstClass 初始化
> 為何不會導致錯誤?
>
> 而我用VC++6 在觀察時,我把中斷點設在第8行 ,
> 程式執行到第8行時, CRuntimeClass* CRuntimeClass::pFirstClass竟然已經初
> 始化完成,這是為什麼?
>
> 還有在第6行 要初始化struct CRuntimeClass CObject::classCObject這個時,
> CRuntimeClass的成員不是有6個嗎?為何在第7行只有5個參數?

●侯捷回覆:

Q: 第8行時 CRuntimeClass* CRuntimeClass::pFirstClass 初始化為何不會導致錯誤?
A: 沒有任何理由它會錯誤。

Q: 程式執行到第8行時, CRuntimeClass* CRuntimeClass::pFirstClass竟然已經初始化完成,這是為什麼?
A: 第10行寫在第8行之後,並不代表它的執行次序就在第8行之後 :)
可參考《深度探索C++物件模型》第6章。

Q: 第6行 要初始化struct CRuntimeClass CObject::classCObject這個時,CRuntimeClass的成員不是有6個嗎?為何在第7行只有5個參數?
A: 這是一個筆誤。詳見《深入淺出MFC》勘誤 2001/07/14。

 

 

傳送日期: 2001年10月6日 AM 01:03
主旨: 關於The C++ Standard Library中文版

侯老師你好:
這幾天看到網站上有新書可以試閱,讓我覺得很興奮,
已經很久沒有看到侯老師的作品了

關於The C++ Standard Library中文版我有一個疑問
4.2.3 最後一個段落,第46頁中間部分  原文:

預設情況下,這兩項操作都會轉交所有權......

我的疑問:預設狀態下的copy construct及assignment operator不是bit copy嗎?
那應該是兩個auto_ptr共同擁有同一塊記憶體,怎麼會造成擁有權的轉移?

自從Design Patterns中文本以後,已經好久沒有看到好書出現在書局,希望侯老師能加油

●侯捷回覆:

Q:
預設狀態下的copy construct及assignment operator不是bit copy嗎?
A: 非也。在繼承或複合(composition)情況下都會比較複雜。參見《Effective C++ 2e》條款45。

本例中,classB 內含(複合)了兩個 auto_ptr<classA> objects,因此,如果你沒有為 classB 撰寫 operator=,當發生assignment 動作時,預設情況下會喚起 auto_ptr<> 的 operator=,而後者會轉移擁有權。同樣道理發生在 copy ctor 身上。

Q: 已經很久沒有看到侯老師的作品了
A: 今年底至明年初,會一口氣推出《多型與虛擬》2e、《泛型技術》、《STL源碼剖析》、《Thinking in Java 2e》、《The C++ Standard Library》,一定讓你看到飽 :)

 



傳送日期: 2001年10月6日 AM 09:25
主旨: 謝謝你的eBooK

大師~
謝謝你提供下載的深入淺出 MFC 第2版
居住省份(臺灣讀者請寫縣市):C.T
對侯捷的建議:

建議是沒有啦,俺只是一個初學者,雖然書 K 上好幾次了
可是不熟練就是不熟練,也一直沒有粉好的創意
可是唸CS對程式不好又不行,只好拼命K囉

只是想請教大師,像程式這種越到後面就越像是一種藝術創作
沒天份的人可以走這條路嗎?
我不想只是做程式設計師,應為他的壽命有限
我的興趣一直是在網路安全方面,之前也做過網管
因為就是學歷不夠才出來唸書
可是唸的粉吃力,再這任何一項作業都幾乎要寫程式
我又是出國後才開始寫程式,照著書上的練習一個一個key in
只是進步真的有限
如果想朝網路安全方向發展,不知大師有何寶貴的建議ㄋ

聽人家說多看別人的程式碼,也成增加功力
只是不知那兒才有好的codeㄋ,看國內的幾乎都大同小異
像之前想找hamming code就找不著,
能請大師指點一下能參考code的站台嗎?

 

 

傳送日期: 2001年10月3日 PM 12:30
居住省份(臺灣讀者請寫縣市):台南縣
對侯捷的建議:
你的付出,是我們這些初學者的一大福音,
雖然剛學程式,這些資源對我們卻是無窮的幫助,也很感謝。



傳送日期: 2001年10月6日 PM 03:12
> 你好我是一名電腦自學者,學習程序設計已有兩年,接觸c++半年了感到有
> 許多困惑一直在心中不能理解,故此想向您討教。
> 現在大陸很難看到關于
c++標准的書,想讓您推荐几本好書。我正在看您的
> 《深入淺出mfc2/e》不過我想致力于與平台無關的方面。

●侯捷回覆: C++/OOP大系《程序員 2001/01》

 

 

傳送日期: 2001年10月6日 PM 05:39
侯捷先生﹕您好﹗
我是天津的一名計算機編程愛好者﹐從學計算機高級語言編程已有三年時間了﹐我是靠一
本《面嚮對象的理論和C++實踐》(北京.清華大學出版)領進面嚮對象化程序設計之中的
。由於我沒有接觸過‘過程化程序設計’的理論和大實踐﹐所以我很快就能掌握‘面嚮對
象’的相關理論。然後從學習C語言到C++﹐再將C++和面嚮對象的理論結合。

我認為以上是從事程序設計的根本基礎。學習基礎C++語法只是為了更好的在商業編譯器
上軟件進行編碼。目前國內學習Visual C++的人非常多﹐但是成功人士少之又少﹐為什麼
﹖從最為基礎、最為標準的C++跨越到使用Microsoft研製的Visual C++用于開發有軟件價
值的程序。在此過渡之間好像有著不可逾越的障礙。
是不是我們在跨越之間﹐還有什麼必
要的而又被我們忽略了的基礎知識﹖
(是數據結構﹐編譯原理、用C++語言實現面嚮對象
的地層機製等等…….)
侯先生是計算機語言教學尤其是C++語言的領軍級人物﹐也有幸拜讀過您的幾篇大作﹐
我的問題也許代表了一部份渴望從事計算機語言編程(C++)而又被阻擋在前進路上的人
的問題。還望侯先生能指點迷津。
最後 希望侯先生能多多出版一些經典書籍。

●侯捷回覆:是的,有一道極大的鴻溝在 C++ 和 VC++ 之間,那就是MFC。MFC是一套application framework,這是
一種極其精緻複雜的library,幾乎可說是OO實現的極致。使用者往往一頭栽入application framework的繁複運用之中,不知頭,不知尾,不知天,不知地,只是胡亂踩著別人的腳步,照著葫蘆畫瓢。

一種陌生型態的工具出現在你的眼前,當你不知道怎麼系統性地使用它時,就必須先進入其肌理之中了解它。很多人有這樣的迷思:library就是用來幫助我的,就是希望我能夠不必了解它而能夠使用它,為什麼我還需要去了解箱子裡的奧秘呢?如果你不知其所以然就能夠運用自如,當然很好,問題是太多人沒有辦法如此。application framework 還沒有發展到像電視或汽車那樣,按個按鈕就動,踩個油門就走。

(1) 深入肌理幾吋才好?就應用而言,深入到你撰寫你的應用程式時沒有太多疑惑就好。如果是學術研究,則當然入木三分最好。
(2) 每次使用工具都得先了解其肌理,不是很累嗎?不,
同類型的工具,可以觸類旁通。如果我對MFC的肌理了解到一個滿足的層次,我使用其他application framework,根本就不必再探究其肌理。
(3) 探究肌理,對於本質學能的養成有莫大幫助。這是應用之外的另一種收穫。

 






傳送日期: 2001年10月6日 PM 07:15侯老師﹐您好﹗
我是浙江大學的學生﹐非常喜歡您的作品。
今天在閱讀你的
think in java的譯稿(pdf)時發現一點疑問,如下﹕
chapter1,p35(
200010919.pdf)

不過﹐實作隱藏(implementation hiding )的觀念也不應該被過度強調

原文“The concept of implementation hiding cannot be overemphasized.”

我的英語也就湊活﹐不知道這句到底是翻為“不該被過份強調”還是“怎麼強調都不過份”
從上下文看﹐似乎後面都是列舉了一些“implementation hiding”的理由。

另外﹐順便想請教侯老師﹐c++程序員如何能順利的轉入java的編程思維之中﹖
不知道有哪些好書(
您似乎對java推薦很少)﹖聽說您沒拿到think in java的簡體版權
我實在感到遺憾﹐唯一
希望你能為大陸讀者多開放幾章﹗﹗﹗
打擾您了

●侯捷回覆:的確,正如您之所言,應該改為:

實作隱藏(implementation hiding )的觀念再怎麼強調也不過份。

(感謝 william 協助)。

Q: c++程序員如何能順利的轉入java的編程思維之中
A: 不需要「如何」,它自然就發生了。

Q: 聽說您沒拿到think in java的簡體版權﹐
A: 拿譯權是出版社的事,從來不是我的事。如果拿到譯權的出版社聯繫我,願意與我合作,各位就可以看到侯捷譯本,否則各位就會看到其他人的譯本。

Q: 唯一希望你能為大陸讀者多開放幾章﹗﹗﹗
A: 好。原本預定開放至第7章。後來決定開放至第10章。因你這句話,開放至第12章。你可真為大陸讀者做了件好事 :)

 

 

傳送日期: 2001年10月6日 PM 08:55
侯捷先生:
你好,我是一位大陸的讀者,我有幸能下載您的著作,所以按您的要求給您回信.
我叫□□,是一個江蘇的學生,今年16歲,上高一.第一次看見您的文章是在程序員雜誌上,很喜歡您的風格.雖然您的書我不一定能全看懂,但我一定會努力學習的,我喜歡編程.希望能看到您更多的著作.
謝謝您的書.

 

 

傳送日期: 2001年10月6日 PM 09:17
侯捷你好!

雖然微軟.net戰略大有對其原有技術全面更新的可能,但我想技術演進如何,其思想卻有其共通性,我期待您的譯著
《Win32 多線程 程序設計》能早日在大陸出版!
當然我們現在基本採用的是win2000的系統平臺,其在線程和進程管理上會有一些新特性,如能
在網上或書中對這方面技術的發展有所提示則更好.
東南大學生物醫學工程系

●侯捷回覆:multithreading不是太好搞的技術。《Win32 多線程 程序設計》的定位是以輕鬆有趣的例題,帶引大家進入 multi-threading 的領域。

 

 

傳送日期: 2001年10月6日 PM 11:42
jjhou﹐您好﹗

Inside The C++ Object Model中的一個疑點
簡體中文版P147頁中﹐Lippman提到

類似的道理﹐如果magnitude()也是一個virtual function,它在normalize()
之中的調用操作將被轉換如下﹕

// register float mag = magnitude()
register float mag = (*this->vptr[2])(this);

此時﹐由於Point3d::magnitude()是在Point3d::normalize()中被調用﹐
而後者已經經由虛擬機製而決議(resolved)妥當﹐所以明確地調用”Point3d實體"
會比較有效率﹐並因此壓制由於虛擬機製而產生的不必要的重複調用操作﹕

// 明確地調用(explicitly invocation)會壓制虛擬機製
register float mag = Point3d::magnitude();

我個人覺得上面的說法有可疑之處﹐因為即使是在Point3d::normalize()中調用
一個virtual函數magnitude﹐也不能就這樣確定此函數就是Point3d::magnitude()
因為調用Point3d::normalize()函數的對象實例﹐可以是任何Point3d類型的子類﹐
此子類也可以任意重載virtual函數Point3d::magnitude()﹐如果以上述這種假設
進行優化﹐實際上就失去了virtual函數的作用。

因此我以為除非對Point3d::normalize()函數的調用是顯式地以Point3d類型實例
(而非引用、指針)進行的﹐否則都必須進行動態查找vtbl。也就是說﹐只有在 Point3d pt;
pt.normalize(); 此時﹐才能將normalize函數內的magnitude調用優化為
Point3d::magnitude()。而且必須在normalize是inline函數的前提條件下﹐(如果不是
inline函數﹐整個程序中只應該保留一份代碼﹐因此不能進行優化)否則都應該以
(*this->vptr[2])(this)方式進行調用。

而Lippman在這段話中並沒有明確提到上述觀點﹐他在之前的例子中也是通過
函數實例指針方式調用normalize()函數(ptr->normalize())﹐因此我以為他的說法是不全面的。


傳送日期: 2001年10月7日 AM 10:17
我是一名大學生﹐學的不是計算機專業。但剛上大學時﹐就對計算機產生了濃厚的興趣﹐靠自己的努力﹐已經通過了全國計算機等級考試三級。現在我在全力以赴考程序員﹐我不知道我以後會幹什麼﹐但程序已經成為我的生命的一部份﹐我想請您給我提些學計算機的方法﹐還有怎樣才會成為一名好的程序員。
謝謝﹐祝您快樂﹗

●侯捷回覆:侯捷網站上有許多好看的文章。我對任何人都是一樣的說法。

 

 

傳送日期: 2001年10月7日 PM 05:06
侯教授﹐你好。
我是一個剛開始開發軟件的程序員
我很想閱讀您翻譯的《C++ Primer》3E﹐可是大陸沒有買﹐那我可以通過您郵購一本嗎﹖
萬分感謝﹗﹗
小小小小程序員 10/07/2001

●侯捷回覆:不,我沒有提供這樣的服務。

 



傳送日期: 2001年10月7日 PM 06:02
侯先生您好﹗
近日訪問了貴網站﹐也對先生新譯作品的出版計劃有所了解﹐我想等這些書在大陸出版之後﹐我一定會買的。我是一名計算機系大學本科生﹐愧于所學無成啊﹗
貴網站的“2001 侯捷 大陸出版計劃”倒數第三行“所ぴ之 (3) Dissecting MFC 2e﹐”﹐我覺得“所ぴ之”應為“所著之”。


●侯捷回覆:你所看到的錯字,是繁簡轉碼所造成。你說的那個字,臺灣已經沒有使用了,在臺灣,那個字和「著」通用。結果呢,「著作」的「著」就被轉成了那個字。

一頭霧水?以上說明被轉為GB code之後,肯定是一頭霧水了 :)

 

 

傳送日期: 2001年10月7日 PM 06:44
侯捷先生﹐您好﹗

很高興在您的網站上看見了您和其它人翻譯的《thinking in java2》﹐我想知道一下
這本書在翻譯完成後是否會在大陸出版呢﹖那大致的時間會是什麼時候呢﹖

另外﹐我在編程上總是有些不明白的問題想問您一下﹐現在我們是以oop的方法來編程序的﹐我也從書上看了很多關於oo的思想﹐可是每當在編程序的時候﹐又總是沒辦法在程序中運用oo思想。不是不想用﹐而是不知道怎麼用﹐
理論和實際沒法聯繫在一起。如果這樣那我應該怎麼辦呢﹖應該從什麼對方下手來解決這個問題呢﹖

還有﹐在書上看到一些程序﹐新創建了個class﹐在class中構建了些方法﹐可是在調用它的class中﹐並沒有使用它的方法﹐那為什麼這些方法還要創建呢﹖難道在內部還有一些運作機製使我必須要創建這些方法麼﹖比如﹕實現Comparator接口的class﹐必須要實現comparatorTo方法﹐可是這個comparatorTo並沒有得到調用﹐那為什麼還必須要創建它呢﹖在這點上我一直不明白。如果可以的話能否請先生幫我解釋一下﹗

●侯捷回覆:
(1) 如果拿到《thinking in java 2e》簡體版譯權的大陸出版社與我聯繫,並且雙方合作意願良好,侯捷譯本就會在大陸出版。
(2) 理論和實際沒法聯繫在一起,是因為理論還沒有內化為你的思想,也是因為你的實踐還不夠。這是很多人的毛病(可能也是一種歷程):說得一口好程序。
(3) 你的例子表明不夠清楚 — 對我而言 :)

 

 

傳送日期: 2001年10月8日 PM 02:00
> 居住省份(臺灣讀者請寫縣市):台北縣
> 對侯捷的建議:
> 很感謝您把您的著作用電子書的方式 release 出來,
> 對我這個家庭經濟不很好的學生來說,可以用極少的經濟代價獲得如此豐富的資源,
> 我覺得幫助很大.感謝您.
> 另外, 您來過我們學校演講, 我有去聽喔 ^_^

 

 

傳送日期: 2001年10月8日 PM 07:59
侯老師﹐您好﹗

還記得幾天前給您的
thinking in java挑刺的那個浙大學生嗎﹖真的很高興能這麼快在您的個人網站上看到您的回復﹐我最快樂的是您能將電子版開放到12章的功能記到我頭上﹐真有成就感阿﹗

好了﹐不說廢話了﹐我繼續再看這本書﹐有兩處有待商榷的地方﹕
1.chapter1 p59 倒數第4行﹐“(也算是某種形式的資源鎖定)”
原文“(which is, after all, one kind of shared resource) ”
我是這樣領會的“畢竟﹐object也是共享資源的一種”﹐因為在您的後文中提到“其他型態的
資源..”(倒數第3行)。
2.chapter1 p67 第5行﹐"另一個重要因素是Web 站台的回應速度。"
原文"This could be important to the responsiveness of your Web site. "
照字面理解“這對你站點的響應能力是很重要的”﹐因為前面說一共有“有兩個因素”﹐而後面還有一個“?有一?因素。。”那樣就有三個了阿﹐hehe

抱歉啦﹐我看書很慢﹐老是在這些枝節問題上與你打岔﹕)。希望到時候台灣讀者到時候能拿到一本完美的書﹐而我們能獲得更多的電子版開放(我也知道一共15章的書開放到12章已經很不容易了﹕))。

●侯捷回覆:(1) 意義相同。(2) 已修改,謝謝。

 

 

傳送日期: 2001年10月8日 PM 11:34
侯老師﹐您好﹗
我是您在大陸的一名學生。雖然我們從未見面﹐但是您的著作與譯作正在指導著我。我喜歡您的直率﹐犀利的言辭使我不在迷茫。對於您為我們做的一切﹐我表示衷心的感謝﹗
我正在讀您翻譯的《Essential c++》﹐在讀書的過程中我深深感到您在譯序所說的“固然﹐輕薄短小的書籍乍見之下讓所有讀者心情輕鬆﹐但如果捨棄的太多應該深入的地方不談﹐也難免令人行止失據﹐進退兩難。”。我有這樣一個想法﹐我想把《Essential c++》為大綱﹐再由《c++primer》將其深入。我不知道這想法是不是有些心急(願您能指正)。如果這方法可行﹐我就非常需要《c++primer》﹐我知道[Lippman98]沒有簡體版。您能告訴我繁體版如何買到嗎﹖好了﹐我不在耽誤您寶貴的時間了。祝您身體健康﹗

●侯捷回覆:以《Essential C++》入門,以《C++ Primer》精深,是很好的步驟。我無法幫你購買《C++ Primer》繁體版。這個問題一再出現,快變成FAQ了。不要再問我這個問題了呀。

曾經在CSDN論壇看到這樣的論調:primer 就是「入門」,thinking 就是「思維」,思維比入門高級,所以《Thinking in C++》優於《C++ Primer》。這是資訊不足以及想當然耳之下的荒謬言論。兩本書都很不錯,但是論者根本沒看過兩方實書(大陸有多少人看過 C++ Primer?),更別提深入了解而後評析,只拿書名來做想當然耳的比較,十分幼稚。你把兒子命名為澤東或澤民,他就成大人物了嗎?如是這般,寫本書就很輕鬆了,取個好名保證平步青雲。

還看到CSDN論壇上的帖文,拿《The C++ Programming Language》和《The Art of Computer Programming》比,和《Design Patterns》比。怎麼不拿張飛和岳飛比?拿馮京和馬涼比?

都是資訊嚴重不足下的產物。資訊嚴重不足,是大環境的悲哀,我從不會拿這個嘲笑我的同胞,但是自己有多少斤兩,自己要清楚,不要胡說八道貽笑大方,評論書籍竟以書名始,以書名終。

有一宗族,兩房吵架。族長勸和說:你們不要吵,要像張飛和岳飛一樣地和睦相處。族中年輕人在旁偷偷告訴族長:兩人相隔百千年。族長曰:是嘛,他們兩個相隔那麼遠,都能夠和睦相處,你們為什麼不能?


 

傳送日期: 2001年10月9日 PM 01:35
主旨:
Thinking in Java 錯誤回報

侯 Sir 您好:

這一兩天讀完 Thinking in Java 中譯本之後, 又發現數個不盡完美之處,
列出在下面供您參考一下:

=============================================================
page 244 of PDF file:

"...區塊才會被密集( compact ) 起來; 如果某個區塊尚被某處指涉
(referenced),其世代計數會被否決。這種方式可以處理數量極大而生命
短暫的暫時物件(temporary objects)。完整的清理動作會定期出現-大
型objects 仍然不會被複製(只是其世代計數被否決而已)。內含小型
objects 的那些區塊則被複製並密集。JVM 會監督GC 效率,如果發現GC
因為「所有objects 皆長期存活」而變得效率不彰,它會轉換至mark and
sweep 模式。同樣道理,JVM會追蹤mark and sweep 模式的績效,如果
heap 斷裂情況太嚴重,它會轉回stop-and-copy 模式。此即「自省式
(adaptive)」的由來。我們可以一句重要的話作總結:自省模式衍生出
stop-and-copy 和mark and sweep。"

這一段話譯者王先生似乎沒有把原著的語義了解得很清楚便直接硬翻, 因此文字
很生硬, 且也有不少錯誤出現. 其中:

"其世代計數會被否決" (all other blocks get their generation count bumped)
bump 這個動詞翻成 "否決" 似乎大有問題, 會造成前後文語意不通.

另外,
"我們可以一句重要的話作總結:自省模式衍生出stop-and-copy 和mark and sweep。"
(so you end up with a mouthful: “adaptive generational stop-and-copy
mark-and-sweep.”)
這一句 generational 翻成 "衍生出" 會讓讀者完全不知所云.

=============================================================
page 323 of PDF file:

"不過blank finals 對於final 關鍵字的使用提供了更多彈性,因為這麼一來,
class 內的final field 便可以指向不同的object,但依舊保持其「恆長不變」的特性。"
(However, blank finals provide much more flexibility in the use of the
final keyword since, for example, a final field inside a class can now
be different for each object and yet it retains its immutable quality.)

其中, 原文的 "...for each object" 這幾個字沒有翻出來. 若翻出來的話整句話會更清楚些.

=============================================================
page 324 of PDF file:

"意謂你無法在此method 中更改該引數(一個reference)所指之物"
(This means that inside the method you cannot change what the argument
reference points to.)

此句參照前後文, 翻成 "意謂你無法將此引數改指向其它物件" 可能會比較不讓人迷惑.

=============================================================
page 329 of PDF file:

"這種情況引導人們相信「猜測最佳化動作應該發生於何處的那些程式員,永遠都是
差勁的程式員」這句話。"
(This lends credence to the theory that programmers are consistently bad
at guessing where optimizations should occur.)

這裡, bad 應該是拿來形容 programmers 猜測最佳化動作應該發生於何處的能力,
而不是形容 programmers 本身吧!?

=============================================================

此外, 剛剛下載了 "C++ 標準程式庫" 的 PDF 檔, 只是稍微瀏覽一下, 便覺得其內容
非常紮實, 是本很值得精讀的好書!

不過乍看之下發現一個小筆誤:

page 22 of PDF file:

此頁兩個 O(n^2) 都打成 O( n2 ) 了.

●侯捷回覆:感謝,皆已重新檢討。Bruce Eckel的文筆不好譯,建興做了很大努力。


 

傳送日期: 2001年10月9日 PM 02:53
你好﹐候先生﹕
我下載了你的Dissecting MFC一書。在此之前﹐我還買了一本。真是一本好書。我是在浙江寧波一個很小的書店﹐偶然間發現這本書的。在此之前﹐我學MFC已經有一年多了﹐總感覺它背ぴ我們做了太多的事情。而如此一來﹐我對它就缺乏足夠的信心。我也不知道當初為什麼會買這本書﹐可能是台灣人寫的吧﹐不妨看看。結果真正是好書﹐我很佩服你。現在﹐我經常向我的學習Visual C++的同事推薦你的大作。應你在網站上的要求﹐我填寫如下資料email給你。
居住省份(台灣讀者請寫縣市)﹕浙江省
對侯捷的建議﹕
希望多寫好書﹐價格不要太貴。



 

傳送日期: 2001年10月9日 PM 03:13
侯老師﹐您好﹕
我是一個您的忠實讀者﹐買了所有您在大陸出版的書並本本精讀。感謝您深入淺出地讓我們看到了眾多世界級的名著﹐包括您譯的和寫的。
現在工作中有一疑問﹐不知您能否百忙中作一簡短回答。
即﹕使用Moniker技術(CoGetObject)來創建COM對象和使用ProgIDToClassID、CoGetClassObject來達到“創建的類無關性”有何本質的不同﹖
MSDN上寫道CoGetObject封裝了CreateBindCtx, MkParseDisplayName和IMoniker::BindToObject,我知道BindToObject之中調用了CoGetClassObject﹐但前面為何需要一大堆調用﹖
如蒙賜教﹐不勝感謝。

 

傳送日期: 2001年10月12日 AM 01:47
侯老師﹐你好﹗
我很喜歡你的書和文章(網站)﹐還有文章後面的personality。就不多恭維您了。還是直奔主題吧。你能告訴我一些與你網站性質差不多的國外網站嗎﹖謝謝!

●侯捷回覆:喔,我不知道。你心目中的侯捷網站是什麼性質 :)

 

 

傳送日期: 2001年10月10日 PM 07:24
> 侯捷先生您好:
> 由於工作的關係(當然也是我個人的興趣),必須把重拾在學校沒
> 學好的C++,當我在找尋教材時,同時也發現先生您,在此領域的學術地位之
> 高,令我心嚮往,同時也謝謝您,不吝分享您的心得。

 

 

傳送日期: 2001年10月12日 AM 01:51
侯老師:

說起來還得感謝您。當初是您幫我轉了一封郵件﹐才和家俊先生取得了聯繫。光陰荏苒﹐
日月如梭﹐轉眼已已經幾個月過去了。其間和家俊先生有過不少的郵件往來﹐相談甚歡。

最近一段時間﹐不知何故﹐我發給家俊先生的郵件﹐總被退回。看郵件服務器之間會話的
情況可知﹐似乎是家俊先生所用的郵件服務器相關方面出現問題。無奈我有比較ぴ急的問
題需要和他聯繫﹐真真急煞人也。

情急之下﹐又不禁想到了您。我想請您代為轉告一下﹐煩請家俊先生可否告知其它的郵箱
地址。他以前給過我的三個郵件地址我感覺都用ぴ不利索。

現把我的去信以及出錯信息一併寄發給您。信中內容主要與王先生的著作有關。也就是您
為他作序編導的《新手打造四大服務》。其中還提到了與您有關的話題呢。方便的話﹐您
不妨看一下﹐如果能在百忙之中﹐給預一點指示﹐那更是感激不盡。

就在我編發這封信的前夕﹐我還專門閱讀了你網站上有關本書的通信。和您其它大作比起
來﹐未免稍嫌冷清了些。
對於傾注了大量智慧和心血的家俊先生﹐也包括您所給予的高度
讚賞與極力推崇﹐也許會有些失落。我這麼講﹐沒有別的意思﹐只是感嘆這麼有深度的一
本好書﹐讀者似乎有些廖然。


和你們的信件往來中討論的內容有所不同﹐我並沒有特別去分析那些細微的代碼操作技
巧﹐而是偏重于它所意在的功能方面。
家俊先生最高明的做法之一﹐就是一些煩雜的技術
細節封裝到層層相套的黑箱裡﹐需要的時候﹐可以站在一個戰略高度﹐進行宏觀的總體把
握。正所謂“把書讀薄”。略去細節﹐取其大略﹐然後在自己特別需要的地方進行生發和
擴展。所謂神似﹐形不似是也。


舉例來說。對於Winsock操作等網絡協議相關的內容﹐以及多線程等技術細節﹐可以幾乎不
予考慮﹐而把精力放在如果實現那些花樣翻新的服務上﹐並加以擴充和發展﹐就可以形成
所需要產品。
就這一點而言﹐我認為此書提供的幫助可以說是無與倫比的

好了﹐就不多說廢話耽誤您寶貴時間了。拜託您設法幫我與家俊先生取得聯繫﹐我還是把
這些話及一些技術請教的內容直接發給他吧。

大恩不言謝﹐逢人傳英名。祝侯先生才思泉涌、新作迭出。 此致!

革命敬禮! :-)

●侯捷回覆:家俊的書是本好書(雖然,源碼精采而解釋偏少)。很巧,他才於昨天寫信給我,告訴我他願意把《網際網路四大服務》這本書籍免費開放PDF給所有人。我將在與GOTOP打過招呼後,幫家俊完成這個心願。等著 :)

 

 

 

傳送日期: 2001年10月12日 AM 01:53
侯大俠﹕
您好!
我們在做PC104嵌入式計算機程序﹐採用MS DOS﹐我們有問題向你請教﹕
主要是程序代碼過大的問題﹐exe文件有>700K﹐而且運行提示”程序代碼過大﹐無法載如內存”﹐或“無足夠內存加載驅動程序”﹗
我們想採用保護模式編程﹐這樣可以沒有內存限制。BC++有一個DPMI(DOS保護模式接口Dos Protected Mode Interface)的函數庫﹐我沒有找到﹐請你幫我們找一下﹐給我發過來好嗎﹖(可能是兩個文件﹕dpmi.h + dpmi.cpp)! 非常感謝您的熱心幫助﹗
謹頌著安﹗
上海

 

傳送日期: 2001年10月12日 AM 09:33
侯捷老師﹕
您好﹗
我是一名程序員﹐從事C++應用程序的開發工作。目前我正在拜讀您的譯著“深度探索C++對象模型”一書﹐已讀到第三章Data語意學。首先感謝您為我們程序員譯出這樣一本經典好書﹐同時我想向您請教以下幾個問題﹕

1. P120第3行﹕Point* p2d=pv3d?pv3d->__vbcPoint2d:0;

根據P121圖3.5a所示﹐指向Class Verter3d 的指針pv3d所指向的對象中有兩個__vbcPoint2d﹐分別為Vertex subobject 和Point3d subobject 所有﹐但不知在“Point* p2d=pv3d?pv3d->__vbcPoint2d:0;”中的
__vbcPoint2d是以上兩個中的一個嗎﹖為什麼class Vertex3d本身沒有一
個屬於自己的__vbcPoint2d呢﹖

2. P122第7行﹕
Point2d* p2d=pv3d?pv3d+pv3d->__vptr__Point3d[-1]:0;

根據P123圖3.5b所示﹐指向Class Verter3d 的指針pv3d所指向的對象
中有兩個__vptr﹐分別是__vptr__Vertex和__vptr__Point3d,分別指向
Vertex subobject的Virtual Table 和 Point3d subobject的Virtual Table﹐因此我覺得將“Point2d* p2d=pv3d;”轉換為虛擬C++碼:

Point2d* p2d=pv3d?pv3d+pv3d->__vptr__Point3d[-1]:0; ------ヾ

似乎是錯誤的﹐因為根據P123圖3.5b﹐__vptr__Point3d[-1]應等於12﹐pv3d為指向class Vertex3d對象的指針﹐若將pv3d轉化為指向Point2d的
指針﹐按照上述的轉換虛擬C++碼﹐少加了Vertex subobject 的offset。
再有﹐如果以上我的理解是錯誤的﹐那麼在ヾ式中為什麼要使用
pv3d->__vptr__Point3d呢﹖為什麼不是__vptr__Vertex呢﹖

侯捷老師﹐我是您的忠實讀者﹐以上兩個問題已困擾我許久﹐終不能解﹐至使無法閱讀本書以下章節﹐因此冒昧打擾您﹐在此懇請您給予解答﹐萬分感謝﹗


侯捷老師﹕
對不起﹐又想起一個問題﹕
根據P123圖3.5b﹐假如有如下代碼﹕

Vertex3d *pv3d;
....
Vertex* pv=pv3d;//假設pv3d不等於NULL

根據P123圖3.5b﹐class Vertex虛擬繼承自class Point2d,
請問﹕此時﹐pv如何指向class Vertex3d對象﹖(Vertex subobject與Point2d subobject之間有Point3d subobject 和float mumble間隔﹐如何將pv3d轉換為指向class Vertex 的指針pv﹖)

再次打擾﹐深表歉意。

 

 

傳送日期: 2001年10月12日 AM 10:43
> 居住省份(臺灣讀者請寫縣市):台北市
> 對侯捷的建議:謝謝, 願能有機會以其他技術回饋您.

 

 

傳送日期: 2001年10月12日 AM 11:25
侯捷先生﹐您好﹗
我非常喜歡你的網站﹐特別是技術專題的文字的敘述風格﹐顯得很親切隨和﹐一點都不生硬。
你的書我也買了兩本﹐可能水平還不差一截﹐需要仔細讀﹐不過我建議你網上的不少貼子很有保存價值﹐值得反復看﹐有時要全盤下載又好像不方便(我下載過一次總下載不完﹐可能方法不對吧)﹐且不方便攜帶到別處閱讀。
您可以委託華中科技大學出版社隨某您一本書一起附後﹐也可能單獨售賣(如果免費電子書籍涉及到版權﹐儘可不包括到光盤中)﹐可能很多人都會喜歡。
希望能常常看到您的著作。

●侯捷回覆:很早之前我已與GOTOP取得共識,要把侯捷網站做成一片精美CD,附帶一本精美小冊,提供給讀者。這片CD不會免費,但會低價。我對於免費的東西,不論買或賣,都沒有好感。就賣方而言,精心製作的東西為什麼不能理直氣壯的取得實質回饋?讀者花點小錢購買,我才知道他們真正在乎它,而非視為雞肋。就買方而言,我不喜歡免費品,我們如何向免費供應者要求服務?如何向他們要求品質?Bruce Eckel 的書都有免費電子版本,而且十分精良,但那是少數中的少數,是異類,我不敢期望我所獲得的免費品都有好品質,並能夠獲得好服務。

你能向免費的email server、web server理直氣壯的要求品質嗎?你能向免費電子書的作者要求品質嗎?得之我幸,不得我命!哦,我不要這麼悲情,這麼沒有保障。

要有怎樣的價值,就要接受怎樣的價格。

有感而發,擾君清聽 :)

如果華中出版社也願意製作發行侯捷網站CD,我當然歡迎。

「CD很容易拷貝,你的有價CD能賣否?」喔,不勞盜版拷貝,網上向來就有完整的 :)
我要用精緻的CD包裝、精緻的別冊,讓讀者願意花點小錢起收藏之心。

這片CD之於我,是個人紀念,我很重視。手上三本書完成後,2002年初就開始進行。等著 :)

 

 


傳送日期: Friday, October 12, 2001 12:11 AM
以下是來自華儲網路書店的轉信:

『然而這樣一本擲地有聲的C++世界名著﹐不僅遲遲未能出版簡體中文版﹐而且在國內其聲譽似乎也並不顯赫。可以說在一年之前﹐甚至很少有C++的學習者聽說過這本書﹐這實在是一種遺憾。今天﹐在很多人的辛勤努力之下﹐這本書終於能夠展現在我們的面前﹐對於真正的C++程序員來說﹐這確實是一件值得彈冠相慶的事。

您好﹐上面這段文字是你們網站關於effective c++的簡介中的一段﹐不知道您看出了沒有﹐彈冠相慶這個詞不應該這樣用﹐這個詞是貶義詞用來形容壞人壞事得到了應有的處罰﹐人們高興的樣子。用在這裡是不是有牛頭不對馬嘴的感覺:)


●侯捷回覆:這位讀者非常用心,感謝。

彈冠相慶不盡然是貶詞。其意喻為「即將作官而互相慶賀」。漢書王吉傳:「吉與貢禹為友,世稱王陽在位,貢公彈冠,言其取捨同也。」這裡並沒有貶義。蘇洵管仲論:「一日無仲,則三子者可以彈冠相慶矣。」這裡雖可引為一點負面意義,但彈冠相慶本身是中性的。

孟岩在引介文中用了這個詞,雖然用典不是那麼精準,但歡慶的、正面的意思還是表達到了,並無牛頭不對馬嘴之憾 — 至少也對到了牛鼻子。依我之見,或可換為「擊掌相慶」。

我很高興和大家討論國學的、文字上的問題 :)






傳送日期: 2001年10月12日 AM 09:19
主旨: 致謝

侯捷您好:
就在剛剛翻閱了C++ Primer中文版時,覺得實在太厚、太不方便了。這一兩年以來,已經習慣如此的大部頭書,盡量能夠有電子檔以供我在PDA上翻閱。心想也許侯先生會不會大發善心,將電子書放在網路上,以供我們這些讀者download。雖知希望渺茫,但還是上網查查吧!誰知,竟然出乎意料之外的,您這幾年的大作幾乎都放上來了,感動之餘,一定要寫封信謝謝您的慷慨與仁慈。

您的書我幾乎都有買,除了有些書,逛了幾家書局還是找不到後,就委諸天命了。
這幾年來,專講技術的書籍,似乎下架得特別快。可能也跟台灣的短視近利,不做研發的社會病症有關吧!搞技術的人,似乎永遠要忍受成為次等公民的待遇。還好,個人的英文閱讀能力尚可,上網查查一些資料,買些原文書,尚可止飢。但一來有些原文書的作者,其造字遣詞實在不合乎技術人之規範(尤其是喜歡用一些生活的例子來舉證、對照。不舉例還好,一旦引用,不但是有看沒有懂,有時還把意思弄擰了。當然這也源於我的英文程度不好。),二來,本國的文字,還是比較親切,即使寫書的或翻譯的人,把文章弄的狗屁不通,至少正確率與看書的速度也一定比看一些原文書快。但綜觀目前台灣的社會,似乎也只有您在耕耘這一塊荒地,面對您的付出,個人我也只有越感羞愧了。

很少打中文,想說的話很多,但雙手無法配合。但,最想說的是:謝謝您!
居住省份(臺灣讀者請寫縣市):台北縣
對侯捷的建議:
1.多出些好書
2.若能隨書附上電子檔,則是功德無量。

●侯捷回覆:每個人都不過是在自己的崗位上努力。教育是我所選擇的志業。您身為技術總監,把產品做好,同樣對社會是大貢獻。

 


傳送日期: 2001年10月13日 AM 12:05
候老師你好﹕
我在看 Essential C++ 簡體版時發現在 p30﹐L-4 和 p31﹐L18 那裡是說傳給ostream 對象
而非
" ofstream outfile( "seq_dat.txt" ); " 這句所說的ofstream ﹐
不知是為什麼呢﹖

還有﹐p33﹐L2 跟 L4 那句才是正確的﹖還是兩句都沒錯﹖
希望沒有妨礙您﹗

●侯捷回覆:ofstream object is a ostream object,所以 lippman 那麼說也沒有錯。
p33 的問題,詳見勘誤表。


傳送日期: 2001年10月13日 PM 12:15
侯老師.您好:
很有興看了你的深入淺出MFC看的時候還不很吃力;能看懂.
但是看到一些有關於COM好于C++ 的文章
我想問一下學習VC++還有前途嗎?
是直接學習COM呢還是先學好C++呢?

●侯捷回覆:「COM好于C++」?兩者根本是不同的東西。你大概是從《Essential COM》這本書的相關文案中看來的。如果你問我我對這句話的看法,唔,我實在不想評論這種無聊的話。如果有人說「C++好于COM」我也一樣覺得無聊。

你問「前途」,其實問的是「錢途」,是吧?該問那些掌握業界動向的大公司。這次我在大陸兩場演講,許多同學問了許多很大的問題,這些問題,有些要問老朱,有些要問老江,有些要問比爾蓋茲,我是沒有資格回答的 :)


 

傳送日期: 2001年10月13日 PM 12:25
侯先生您好
我是大陸的一個大三計算機專業學生.
我是在<程序員>上認識您的.您所講的東西,
在我聽來,高深精闢而不晦澀難懂,實在是令我受益非淺.
在此,我有幾個問題想向您請教:
我的學校在大一大二開的都是基礎課,
現在我們只學了一們c和foxpro數據庫語言,
如今,我正面臨進階語言的選擇.
在我看來,c++的生命力還很強,但是鑒于它精髓
的過於深奧,許多人已投入java的懷抱;java固然可愛,
但也不是完美;而且,微軟又搞出了一個結合了c++和
java好處的c#,還有vb等等東西,我已沒有頭緒,很想向前輩們請教.
我曾自學了網絡客戶端(javascript)及服務器端編程
(asp),現在我正在作一個公司內部留言系統,要求是要實現
無組件上傳,本來我已實現該功能(在網上找到的代碼),
但後來發現服務器端環境是nt4+iis4.0,而我用的代碼
則要求必須在2000+iis5.0下運行.所以還要重做.
但我在大陸的網站上還沒找到名師指點.現求助于您!

如蒙賜教,不勝感激!!

●侯捷回覆:你求助於我什麼?求助要有重點,這樣的信沒有人能回答你。BTW,asp, javascript, iis 都是我無法幫助你的。我能夠對各位帶來的幫助,都在我的文章和書裡。

 

 

傳送日期: 2001年10月13日 PM 08:28
侯先生﹐你好﹗

我是大陸的一名研究生﹐現在正在學習c++語言﹐是borland c++3.1版本﹐我遇到這麼一個問題﹐c++中有一個圖形工具軟件包--名為Borland Graphics Interface,簡稱BGI,但是由於我用的是Borland c++5.0編譯器﹐每當運行圖形文件時﹐總是出錯﹕不能在windows下運行BGI,我就想請問侯先生﹐我怎樣才能在Borland c++5.0編譯器下運行該軟件包。望侯先生能在百忙之中給與解答﹐謝謝﹗

祝事事如意﹗

●侯捷回覆:BGI 是在 DOS 環境下將螢幕切換到繪圖模式。你如果在Windows的DOS BOX 中執行它,必須使用 full screen (not window) 才行。而且MS Windows演化到現在,是否其full screen DOS box 還能支援 real mode,不無疑問。我想你不該再使用 borland C++ 3.1,你學會了BGI,將來在業界派不上用場。

 

傳送日期: 2001年10月13日 PM 10:00
jjhou﹐您好﹗
請問《C程序設計教程》的作品勘誤在哪裡有﹖
謝謝
致禮﹗

●侯捷回覆:為什麼我成了各位的搜尋引擎?我回答這個問題,唯一的意圖就是希望不要再有人問我這類問題。

 

 

傳送日期: 2001年10月14日 AM 12:00
侯老師﹕
您好。我現在職。自己在昏天地暗學習數據結構,感覺很難﹐不過事實也很難。前幾天買了看華中的《essential c++》,Very Good!
一時冒出如果要是侯老師能推薦或翻譯國外的比較好的《數據結構》之類的書(翻譯更好)﹐那我們這些人可就不用這麼辛苦了﹗
一時之語﹐望侯老師考慮。 謝謝你譯的《essential c++》和《Effective c++》及《深入淺出 MFC 2/e 簡體版》﹐希望繼續...
謝謝您了先!

●侯捷回覆:我個人對 data structure 很感興趣,但對於翻譯這樣的書比較不感興趣。

 

 

傳送日期: 2001年10月14日 AM 09:15
敬的侯Sir﹕
您好﹗我是大陸的一名普通大學生﹐現在北京念書。很抱歉在您百忙中打擾您。其實﹐早就想給您寫信了﹐但一想到您每天收到Email的數量﹐就...。呵呵﹐想必現在看和回復讀者來信已經成了您一個不小的負擔了﹐就如您自己所說的﹐甜蜜的負擔。使我決心給您寫信的原因是--我想採訪您﹗
喔﹐我不是什麼雜誌的小記者﹐我只是想代表我們學校的所有編程funs向您提幾個簡單的問題。這很?我內疚﹐我知道您是如此如此的忙﹐而您又是一個嚮往恬靜舒適生活的人(從您的文章中看出來的)﹐可是﹐如果您能抽空半小時來解答我們的問題﹐帶給我們的快樂至少將持續半年。所以﹐想到投入產出比這麼高我就冒昧了 ﹕) 。
在代表大家發言前﹐我想先只是作?我個人說幾句。首先﹐我要向您表示我最大的謝意。我從您的書裡學到了很多很多知識(只要一本書的作者、譯者或者?任??什麼的名單裡有您的大名﹐這已經?成要我立刻掏腰包的充要條件了)﹐但我覺得﹐這還是次要的。最主要的﹐是您教給了我為什麼要去學和如何去學。俗語說﹕授之與魚不若授之與漁﹐您確確實實教給了我如何去“漁”。像您說過(或引用)的一些話﹐成了我學習的座右銘﹔您說“開心之果不獨證﹐解脫之味不獨飲”﹐所以我自己在校園網裡掛了?個人編程網站﹐開始翻譯一些英文文章和?一些東西共享給大家看﹐在BBS上也盡量幫助那些比我更“初學者”的初學者。作這些時沒有一點其他的想法﹐幫助人本就是一件很快樂的事兒﹐其次﹐我想我做過的已經給我帶來好處﹐就如同您說過的﹕凡走過的﹐必留下痕跡。您的網站是我常去的地方﹐實際上﹐嗯﹐我已經把它當作一個休息的地方了(您不會介意吧﹖)?我看書看得太累了或者?代碼?的頭疼的時候都會去您的網站轉轉﹐它?是能又一次的激發我的熱情。呵呵﹐不能再說下去了﹐再說下去就變成個人崇拜了。﹕)
好了﹐我還是回到我的問題上來﹐下面是我?的問題﹕

1﹐ 什麼促使您走上了資訊這條路(據我所知﹐您大學的專業並非計算機)﹖

●侯捷回覆:興趣。

2﹐ 您覺得成為一名優秀的程序員最重要的素質是什麼﹖要從程序員轉型到系統分析又要求什麼素質呢﹖

●侯捷回覆:興趣。興趣帶來熱情,熱情帶來卓越。

3﹐ 您評價一本書好壞與否的標準是什麼﹖

●侯捷回覆:1. 是否符合它所定的標題(書名)2. 是否技術正確  3. 是否有閱讀趣味(組織與文字)。

4﹐ 您覺得為什麼是C\C++成為了工業標準而不是其他語言呢﹖它有什麼地方是其他語言不可比擬的﹖您預期它還能保持它的標準地位多久﹖

●侯捷回覆:C 的效率,C++ 的回溯相容、效率、龐大的解決問題的各種機制。除非Java和C#在效率上貼近C++,否則難以撼動C++在編程語言上的主流地位。工業界許多軟件,視效率為生命,重視的程度非親身經歷難以想像。當然,不同特色的語言,在不同領域上各擁一片天,也是必然的。

5﹐ C++在幕後作了很多動作﹐了解這些動作是有必要的? □□@?限度怎麼把握才能?我?不至於過分呢﹖

●侯捷回覆:了解 C++ 的幕後動作有其必要。了解到「當你以C++解決問題時,對語言本身以及你的所作所為 心無罣礙」為止。這就是你下探內核的限度標準,應用於每個人身上,所得結果都不相同。將以上的 C++ 替換為任何技術,都適用。

6﹐ 對於一個想沿著C->C++->API->MFC->OOP/GP->OOA->OOD﹐(還有OLE和COM﹐該在什麼時候開始學呢﹖)這條路學習的人,您有什麼好的建議嗎﹖(請您就每個階段如何學提一些建議並推薦幾本書)

●侯捷回覆:你所列的每一個階段,除了OOA,我都有建議,我都有書單,都在侯捷網站上。

7﹐ 如何長久的保持激情﹐請問您是怎麼做到的﹖

●侯捷回覆:藝術家的激情,發自內心。常人的激情,需要鼓舞。我屬於常人,所以我努力做一些成績,得到讀者的回應,這便激發了我的進一步熱情。我的意思是,首先,要有激情,先要有興趣,然後要努力做出一些成果,然後便能形成一個善性循環。

8﹐ 您覺得GP和OO的關係如何﹖GP是屬於OOP的範圍嗎﹖或是GP是一次“編程思想上的革命”﹖

●侯捷回覆:GP 和 OO 相輔相成。不要陷於文字障。把 GP 和 OO 的實際技術弄懂,比進行文字辯論有意義得多。它們的文字敘述,應該交給像我這種著書立論進行技術教育的人來做,然而我不可能在空中告訴你這些東西。缺少完整的論述,談這種話題將毫無意義,而我不可能在這裡給你完整的論述。

9﹐ GP發展出STL已經很了不起了﹐不過???將設?GUI庫﹐能給我們講講GP的前景嗎﹖

●侯捷回覆:來信有亂碼,我猜不出你的意思。GP前景很好,我這麼認為。如果你有機會好好使用STL,或甚至進而看看STL源碼,你會對這項目前仍持續帶給人們驚喜的技術發出讚美。STL已經可以形成一門技術(而非只是一個library),GP更廣泛。

10﹐ 您是否會加大在大陸出書的力度﹐以後您的書有沒有可能繁體簡體一塊兒出﹖

●侯捷回覆:我希望我的所有著譯作品都在大陸出版。但是關於譯作(也就是原文書的侯捷譯本),我沒有主動權。至於我的著作,今後都會繁簡體一併出版。由於作業流程之故,簡體版比繁體版晚一兩個月左右,相信是大家能夠理解的。

其實﹐我們有一肚子問題和一肚子?﹐不過
出於人道主義原則就不再折磨您了(開個玩笑﹐呵呵)。最後﹐祝您全家安康﹐幸福美滿﹗

●侯捷回覆:出於人道的考量,我回答了你所有的問題。這也使得我的最新作品延後一個小時完成 :)

 

 

傳送日期: 2001年9月22日 AM 11:14
候老師你好:
近日我正在閱讀您譯著的Essential C++中文版(簡體版),可是在書的開頭就遇到了一些問題,希望您能夠在面忙之中幫忙回答一下,學生將不謝感謝.
在書中介紹的頭一個程序中使用了以下一行語句.
using namespace std;
我感覺書中解釋的不是很明白.只是草草帶過.所以我個人對此不太理解.希望您能夠舉例說明一下.
另外我把他書上的例子拿到VC6的控制臺程序下編譯也通不過提示,std不是標準的或者是不存在的名字空間.另書中所使用的string類也不存在,是不是必須包含什麼頭文件或者是對編譯器進行某些特殊的設置方能編譯通過.
我本身是一個DELPHI程序員,雖然對C++一直很感興趣,但是也僅是會一點皮毛而已,所以我十分想拿你譯著的書來充充電,不知道您對Delphi程序員學習C++有沒有什麼一些建議和意見,如果有的話,學生洗而恭聽.

●侯捷回覆:書中程式都是正確的。你對編譯器和編譯選項(compile options)不熟悉,請到論壇上發問,或者另外多看幾本書。

 

 

傳送日期: 2001年10月15日 AM 09:21
jjhou老師﹐您好﹗
  又寫信來打擾您了。
看到您的網站10月讀者來信中有有關《C++ Primer》和《Thinking in C++》的議論﹐突然發現先生對《Thinking in C++》的評論極少極少。我沒看過《C++ Primer》(上次給CSDN寄錢去買您的這本書﹐可惜至今也沒有回音 :) )﹐現在只好到網上當了《Thinking in C++ 2/e》來看。但我心裡在想﹐為什麼侯先生不對《Thinking in C++》也評論一番呢﹖難道這本書的份量不夠重﹖

中國申奧成功了﹐高興﹔中國足球進了世界盃﹐高興﹔現在書店裡突然出現了這麼多C++經典書籍﹐更高興。真要感謝侯先生和華中出版社的努力。

另外﹐想問侯先生一個小問題﹕我在《Thinking in C++ 2/e》的第一章“Introduction to Objects”的“Reusing the implementation”一節中﹐有這麼一段話“Composition comes with a great deal of flexibility. The member objects of your new class are usually private, making them inaccessible to the client programmers who are using the class. This allows you to change those members without disturbing existing client code. 【YOU CAN ALSO CHANGE THE MEMBER OBJECTS AT RUNTIME】,to dynamically change the behavior of your program. Inheritance, which is described next, does not have this flexibility since the compiler must place compile-time restrictions on classes created with inheritance.”這“在運行期改變成員對象”的操作怎麼做﹖我想不出來。侯先生能否指點一二﹖

再三佔用侯先生寶貴時間﹐十分抱歉﹗

●侯捷回覆:《Thinking in C++ 2/e》是好書。我沒有評論它,不代表它份量不夠。臺灣因為有了《The C++ Programing Language》和《C++ Primer》中譯本,而且都是由大家所信賴的譯者所譯,所以臺灣這邊少有人討論《Thinking in C++ 2e》。



 

傳送日期: 2001年10月15日 PM 11:12
您好﹕
首先﹐我是一位初學者。
其次﹐我讀過您的一本書﹐《深入淺出MFC 2e》﹐非常精彩﹗
我一下子覺得自己不再是初學者﹐我又學了幾本書﹐是關於界面設計的﹐不錯﹐我覺得我有很大的進步﹕)
但是﹐我停止不前了﹐因為我現在正學一些系統的東西﹔我覺得用VC做界面那太可笑了﹐有VB﹐Dephi﹐這麼多好工具誰會去用VC做界面呢﹖於是我想用VC的好處應該是對系統的封裝應該比別的語言要好吧(不知道對不對)。不管怎麼樣我現在遇到了困難﹐我不知道該怎麼學下去﹐《深入淺出MFC 2e》上講到的動態創建﹐動態聲明﹐我也有了解﹐但我要學的東西也許並不是那些結構的問題﹐而是那些封裝好的類不會使用的問題﹐WIN32 API函數不會用的問題﹐在MSDN裡也許能找到一些使用方法但那樣不但麻煩而且不完善﹐所以我想請教您的問題是﹕您能介紹給我幾本您的關於使用這些類或API函數書嗎﹖因為您的書我覺得平易近人﹐至少我讀起來很輕鬆﹕)
(我想得到有關網絡知識的書)

●侯捷回覆:MFC classes 和 Win32 APIs 太多太多了,因此幾乎沒有紙本書籍對它們做系統性的介紹。早些年 Waite Group 有 Win32 APIs 一套書,微軟本身也出了 MFC classes 紙本手冊。這一類東西,看紙本書不如看 MSDN library (CD) — 主要是查閱方便。你難以接受MSDN library,主要是因為你對MFC的整個架構不熟悉,所以你看到的任何 APIs 或任何 classes,無法在你心中起一種具體效用,因為你的心中缺少一張地圖。

 

 

 

傳送日期: 2001年10月16日 AM 12:23
候先生﹕
您好﹐去年下半年﹐有人在學校的BBS上貼了幾篇你寫的文章。仔細看了後﹐很有收穫。聯上您的網站﹐發覺風格真是很奇怪﹐(抱歉我用這個詞﹐實在是給我的第一印象)呵呵﹐很難想象一個這麼多產的科技作家﹐居然能寫﹐譯過這麼多堪稱精品的作品﹐實在是對您比較佩服。
我94年上大學﹐開始接觸計算機﹐由於所學的專業(機電控制)的緣故﹐所以對低階技術比較感興趣﹐主要是用C和彙編做東西。98年上碩士前的兩個月空隙﹐替人做一個windows下的東西﹐才開始接觸C++和windows編程。缺乏高手指點的時候﹐實在只能靠書籍來填充自己﹐買了很多現在知道絕對都是垃圾的書﹐花了差不多一個月﹐才對windows有所感覺﹐所幸要做的東西比較簡單﹐被我用C語法寫的C++(當然不敢用MFC)給搞定了:P。讀碩士的兩年半﹐整天跟更為低級的單片機(8096之類)打交道﹐期間也花了點時間琢磨了MFC和windows編程﹐過了能用VC+MFC編程的門檻。現在就讀計算機的博士﹐主要以VC為開發工具﹐開始學習C++﹐COM。很幸運在您網站上找到一系列這方面學習的文章﹐使我能節約大量的時間﹐真的很感謝您。
您在大陸出版的書﹐除了《深入淺出MFC》﹐其他我都買了。覺得實在不錯﹐可惜! 這些書的第一版印刷上錯誤還是不少。如
《Essential C++》中template那一節﹐有幾個地方把template給拼成tempalte﹐《effective C++》中排版上由於註釋換行不當﹐導致註釋中的說明進入程序﹐最不該的是《深度探索C++對象模型》居然封面﹐封底都有錯。編輯實在該打PP﹐嘿嘿。希望以後出書速度上雖要快﹐可校對的人手也要足夠﹐不至於再出現這種差錯。雖說都是小細節﹐無傷大雅﹐可要走精品這條路﹐那就得把每一個細節都做好﹐精益求精呀。
《深入淺出MFC》這本書﹐我從別人那裡拷過電子版﹐覺得第三章特別有用﹐雖然我也曾經分析過那些macro﹐對其工作原理也有所了解﹐很高興候先生能分析﹐總結得這麼徹底。讓我對其了解又更進了一步﹐使得我在分析wtl的消息映射機製時候能有所借鑒﹐實在是非常開心。不過這種單根架構的﹐體積龐大的application framework。就我自己感覺而言﹐應該已經不是發展方向了吧﹖atl﹐wtl這些廣泛利用template﹐MI以及GP技術的靈活、高效的類庫以及架構這些類庫的技術﹐我覺得是將來的熱點。可能我硬件做的太多﹐最看重的東西是高效率和靈活性﹐個人非常喜歡這些技術。也想在這方面繼續深入下去。不知這個觀點是否正確﹐懇請先生指正。!
按照先生您的要求。我把個人資料列在最後。
學歷﹕博士在讀。
籍貫﹕浙江省。
現就讀浙江大學計算機系。

●侯捷回覆:
「靈活、高效的類庫以及架構這些類庫的技術﹐我覺得是將來的熱點」,同意。
「可能我硬件做的太多﹐最看重的東西是高效率和靈活性」,呃,任何人都看重高效率和靈活性 :)

 

傳送日期: 2001年10月16日 AM 09:39
侯先生﹐周編輯﹐你們好﹗我是一名武漢的讀者﹐我在閱讀《essential c++》時﹐發現了幾個值商榷的問題﹕

1.在第三章的3.1節中﹐各個版本的find的返回值都好像都遺忘記了const﹐導致在編譯時發生錯誤﹕

例如P68頁的
int* find(const vector<int>& vec, int value)
應改為﹕
const int* find(const vector<int>& vec, int value)
本節的其它find版本皆有此問題。

最後P71的find調用示例也應修改如下﹕
const* pi = find(ia, ia + 8, ia[3]);
const* pd = find(da, da + 6, da[3]);
const* ps = find(sa, sa + 4, sa[3]);

2.在P82頁中的is_elem函數無法通過編譯﹕
bool is_elem(vector<int>& vec, int elem)
{
int max_value = max_element(vec.begin(), vec.end());
if (max_value < elem)
return grow_vec(vec, elem);
if (max_value == elem)
return true;
...
}

是否應改為如下﹕

bool is_elem(vector<int>& vec, int elem)
{
int* max_value = max_element(vec.begin(), vec.end());
if (*max_value < elem)
return grow_vec(vec, elem);
if (*max_value == elem)
return true;
...
}

對這兩個問題﹐不知您以為如何﹖最後希望你們能多出一些經典好書。

●侯捷回覆:的確。這兩個地方都有錯誤,你是正確的。我將列於勘誤表,但不準備修改稿子,因為修改它們不知是否會牽一髮動全局。這些修改工程比較大,還是由原作者Lippman全盤考量才好。

 

 

傳送日期: 2001年10月16日 PM 02:41
essential c++簡體中文版
p23頁倒數第二行。
"expression會在循環每次迭代結束之後被計算。"
我在vc6.0下調試
int i = 0;
for(i = 0;i<3;i++)
{
cout <<i;
}
發現i++是在每次執行循環體﹐也就是cout << i;之前就已經執行過了。是不是因為編譯器的原因呢﹖
還有就是范型算法find() (vc6.0)是這樣定義的在文件algorithm中
template<class _II, class _Ty> inline
_II find(_II _F, _II _L, const _Ty& _V)
{for (; _F != _L; ++_F)
if (*_F == _V)
break;
return (_F); }
如果找不到﹐不能返回最後一個值﹐而是一個未知指針﹐沒有本書p75頁介紹的好﹐錯誤的原因好像也是上面的所說的。

●侯捷回覆:你的上半段「發現」是錯誤的。你的下半段說明令我不知所云。

 

 

傳送日期: 2001年10月16日 PM 03:12
主旨: 如何晉身為一個VB的高階者
侯先生您好:
我拜讀您的大作,"無責任書評3",了解到如何從一個初階者進入到高階者的殿堂,
而,你是以C做例子,而我任職的公司以VB為開發工具做資料庫,那做為一個VB的
初階者,我要如何做,才能進入VB的高階殿堂?請問要具備哪些技能,又有什麼書您
可以介紹給我?
感謝您的幫助.
P.S:我本身是資管系畢業.

●侯捷回覆:您問錯人了 :)  我不懂 VB 呀。

 

 

我已經買了《深入淺出 MFC 2》 的中文簡體版﹐但沒讀幾章就讀不懂了。
我知道自己的C++基礎不是很好﹐所以決定買您的C++ primer,可是沒找到﹐好難買。
下載電子版是為了可以在公司工作之余看一看。
在此﹐問候侯先生好﹐祝您健康、愉快﹗

現職﹕軟件開發
居住省份﹕廣東深圳

建議您的書都能夠儘快在大陸出版﹐這裡有更多尊您為師的學生﹐其數量一定不少于台灣。您越早做出這樣的決定﹐受益的人就會越多﹐我們國家的IT發展就會更快﹐民族富強也就更快。也許您覺得這話有些大﹐但是想一想﹕如果今天仍然有相當多的計算機學生沒有好的教師和書籍﹐他們成長後所影響的人絕非少數。

●侯捷回覆:我同意你對教育的看法。我也希望我的所有著譯作品都能夠在大陸出版,但是譯作的主動權不在我 :)

 


傳送日期: 2001年10月17日 PM 02:11
> 現職:韌體工程師
> 居住省份(臺灣讀者請寫縣市):新竹市
> 對侯捷的建議:可否將絕版書集結成冊

●侯捷回覆:能夠開放的,我都開放了。出版的事情很複雜,既然會絕版,表示出版商認為已經沒有利潤,那麼怎麼還會有人願意集結成冊出版呢 :)

 

 

傳送日期: 2001年10月17日 PM 04:58
居住省份 ﹕江蘇
對侯捷的建議﹕
尊敬的侯捷先生﹕
您好﹗我是大陸IT行業中普通的一名開發者﹐由於剛畢業不久﹐工作中用到vc++﹐不是很熟悉﹐經過一個多月的苦讀苦學﹐現在對vc算是有了個大致的印象﹐我覺得要想事半功倍地學好她﹕第一﹐要有C++的基礎﹐最起碼概念性的東西和語法要知道﹐其它可邊練邊學﹔第二﹐Windows的工作過程要知道﹐我覺得Message機製就很重要﹐學懂它﹐很多東西都知道了。第三﹐買更多的書﹐看更多的書﹐其中《Visual c++ 技術內幕》和您的著作《深入淺出MFC》不可不買。雖然《深入淺出MFC》有二版了我早早將她買回來了(之所以買這麼早﹐是因為晚一時就沒了﹐您的著作在大陸一直享有很高的聲譽)﹐但一直沒有時機讀﹐如今來到公司可以整天擁讀﹐一段時間以來﹐自我感覺獲益匪淺。第四﹐大部份有關書籍都是翻譯過來的﹐最好看原版的﹐因為很多書翻譯得不好﹐如"Think as C++”太好了﹐但到了“C++的編程思想”就不知所言何物﹐差太遠了﹐English很重要哦﹐老外真是厲害﹐寫的東西很好。這些只是我個人的一些淺見﹐不知道說的對不對﹐侯先生﹐希望能得到您的評價指正。

●侯捷回覆:一本好書,一定要有好的翻譯,才能保有其原價值。但是據我了解,大陸許多(可以說絕大部份)出版社還不能充份體會一位好譯者的價值,這種情況下要出現優秀譯者(乃至於優秀作者)也就很困難了。

 

 

 

傳送日期: 2001年10月17日 PM 10:17
jjhou﹐您好﹗
侯先生我從實驗室的ftp上得到您的書﹐對於你關於自由媒體的傳播的看法深表認同。也很尊敬您所作的作。我既然是免費得到這本書的﹐則無法從經濟上給與您任何回報﹐但我願意以認真的學習表示對您的尊敬。謝謝﹗
北京理工大學 電子工程系





傳送日期: 2001年10月17日 PM 11:14
謝謝你的書﹐我叫□□□﹐是一個很想學c++的學生﹐我現在在湖南吉首大學讀書﹐學的是計算機技術與科學專業﹐現年21歲﹐男。我不明白為什麼那麼多人學c++﹐而又有那麼多的人討厭c++﹐而我呢﹐是對c++很有興趣﹐但被它嚇倒的人﹗﹗

我希望侯捷以後能多給我們一點好書﹐對我來說好書就是我的命﹐我買了很多本c++的書﹐但都起不了什麼作用﹐也許是個人原因﹐但瓶我的感覺來說﹐那些書確實比較差﹗﹗我的E-mail是oooooooooooooooooo希望你以後多多指教﹗﹗﹗﹐拜託﹗﹗


 

傳送日期: 2001年10月18日 PM 12:30
敬愛的侯捷先生﹕
您的《Think in Java2》是否要在大陸發行簡體版﹐如果發行大約在哪個時間﹖非常感謝。望順利﹗

●侯捷回覆:《Think in Java 2e》的侯捷譯本不會在大陸出版,除非擁有簡體版譯權的出版社願意採用我的譯稿並和我聯絡。

 

 

傳送日期: 2000年9月27日 PM 03:09
侯SIR 您好:
不好意思,再請教一下,有關C++ PRIMER 3/E 此書,是否必須直接向眳p訂購呢?
因為在市面上都買不到,可是眳p的網站都進不去,而且打104居然查不到眳p的
電話,我該怎麼樣去購買此書呢? 煩請回答,謝謝
你的讀者.

●侯捷回覆:《C++ Primer》2001修正版已經出版。你就近找書店購買就行了。




傳送日期: 2001年10月19日 AM 10:16
主旨: 在下有一個長久的困擾
侯老師 在下有一個長久的困擾 我相信這問題應該盡早解決
我從學C++到現在有一問題 就是看你的書有些範例的有的原始碼
的英文術語 不知翻譯成中文的名詞是啥 或是函數不知他是
做什麼用的 不知你有這些資料可以給我嗎 這真的是我
很大的問題 希望你能幫我解決
謝謝

●侯捷回覆:我不知道怎麼幫助你。侯捷網站上有一份英中繁簡編程術語對照表,是我個人的整理。

 

 

傳送日期: 2001年10月19日 PM 03:53
您好﹗《深入淺出2E》有這樣一個迷惑﹕
BOOL CObject::IsKindOf(const CRuntimeClass* pClass)const
{
CRuntimeClass* pClassThis = GetRuntimeClass();
while(pClassThis!=NULL)
{
if(pClassThis==pClass) //就是這裡﹐指針地址相等
return TRUE;
...

}
}

CMyDoc* pMyDoc = new CMyDoc;
pMyDoc->IsKindOf(RUNTIME_CLASS(CDocument)); //是TRUE

這就是說﹕
繼承類與母類的“運行時類“指針地址相同﹐依次類推﹐所有的類(MFC類)的”運行時類“指針地址都相同﹐因為都是從CObject繼承﹐怎麼還有IsKindOf為FALSE的時候呢﹖

●侯捷回覆:可能你需要更清楚認識繼承、虛擬函式、CRuntimeClass。

 

 

傳送日期: 2001年10月19日 PM 05:10
候老師﹕
現職﹕軟件工程師﹐目前從事網絡安全方面的工作
畢業學校科系﹕北京工業大學計算機科學與技術系
居住省份(台灣讀者請寫縣市)﹕北京
對侯捷的建議﹕
此次我從您的網站上下載了能夠下載的所有書籍﹐首先我對您的慷慨表示衷心的感謝。
作為這個行業中的一名工作者﹐註定要不斷的學習﹐對我這樣剛從學校畢業的人來說就更加重要。您的書籍是我學習的最大幫手。
目前﹐我正在研讀《深入探索c++模型》和《深入潛出MFC》兩本書。從中受益匪淺。
本人從編寫第一個程序到現在也有五年時間﹐到現在開始發現﹐
作為一個程序員決不應該僅僅滿足于編寫代碼﹐應該向設計的方向發展。我準備在讀完這兩本書後開始讀一些UML方面的書籍﹐但是我又想學習一些COM方面的東西。可是﹐時間總是有限的﹐我到底應該先學哪一個﹖希望能得到您的指點。
這是我給您寫的第一封信﹐在這之前您已經成為我的良師,希望以後能和您有更多的交流﹐更加希望能和您成為朋友。
祝您健康

●侯捷回覆:「作為一個程序員決不應該僅僅滿足于編寫代碼﹐應該向設計的方向發展。」我不太清楚大陸怎麼定義程序員(programmer)。在臺灣,我們通常認為程序員當然包括設計。首先是小模組的設計,然後由小到大,最後自然就掌握整個(或大半個) project。正式職稱一般我們不說程序員或程式員,而說軟體(軟件)工程師。

UML和COM沒什麼先後次序關係,你愛先看哪個,就先看哪個吧。

 

 

傳送日期: 2001年10月18日 PM 11:06
我是一名大陸讀者﹐非常愛看書﹐也買了很多書。
現在我特別想知道您常在文章裡提的“BBScompbook看板”的網址是什麼﹐我找了好久都沒有找到﹐因為特別想和台灣同胞交流﹐所以只好麻煩您了。
您能在您的網站裡的“網路資源”裡加上嗎﹖

●侯捷回覆:140.114.87.5 是新竹清華大學資訊系的BBS,其中有Computer/CompBook 版。臺灣各大學的BBS是聯線性質,所以你可以看到各大學同一論壇上的所有帖文。

 

 

傳送日期: 2001年10月19日 PM 03:00
侯先生:
您好!
很高興在重慶的書店裡買到了您譯的"Essential C++"?體版,書沒看完,發現了一點小錯誤,好像是?體版轉譯造成的吧?
p9 L-8 p10 L5 p30 L-4
原文:字面常量 原文:ostream對象
更正:字符常量 更正:ofstream對象

p57 L-3
原文: display-message('\t'); //到底是哪一個呢?
更正: display-message('\n'); 注:缺少此句!
display-message('\t'); //到底是哪一個呢?

BTW: 我更期待Lippman的另一本---C++ Primer 3/E,希望CSDN能夠代理您的譯本!

●侯捷回覆:你把我搞得昏頭轉向。總之,你所看到的,都是正確的(都是我要表達的)。

 


傳送日期: 2001年10月20日 PM 10:14
主旨: SingleDocumentQuestion

Dear Prof.Hou:
I have meet a question after reading your dissection MFC. I found in the SingleDoc Typed program that is produced by AppWizard, there is no intialization such as "m_pMainWnd = new CMainFrame". But m_pMainWnd is equal to pMainFrame.Could you tell me the process that the m_pMainWnd is initialed.
One of your reader

●侯捷回覆:這可得花些時間研究研究。

 



傳送日期: 2001年10月21日 AM 12:38

> 侯老師你好
> 自聽了您來光電所上的幾堂課後, 獲益匪淺, 僅在此感謝.
>
> 不知您是否記得 CSplitterWnd 中, 多個 CView 繼承物件與 CDocument 物件的相
> 關討論, 即, 程式中只宣告了一個 CSingleDocTemplate 來定義一個 CView 繼承物件
> 與 Document 的關係, 另外的 View 如何對應?
> 我想關鍵應該在 CreateView 中的 CCreateContext 參數, 那麼, 如果程式宣告
> Multiple Document 呢, 例如, 宣告兩種 Document, 而欲用 3 個在CSplitterWnd 中
> 的 View 來表現, 如何指定第三個 View 所對應的 Document 呢?
>
> 另外在課餘時曾討論 ON_REFLECT 及 ON_CONTROL 的訊息傳遞, 我的見解是 MFC 會
> 試圖將該訊息傳給 Owner Window, 如無 Owner Window 則傳給 Parent Window, 不知
> 是否正確

●侯捷回覆:第一個問題,關鍵的確在於 CreateView()。
第二個問題,我將整理於《多型與虛擬》2e 第6章的 MFCLite 3.0 源碼和說明。請不要誤會我在賣關子,我實在沒有力氣在這裡再教學一次。那一章我打算開放下載。

 

傳送日期: 2001年10月21日 AM 10:32
侯俊杰先生﹕
您好﹗在朋友的推薦下﹐我開始閱讀您的《深入淺出MFC》這本書。
我的C++基礎屬於中等水平﹐所以現在一邊學習C++一邊看您的書﹐感覺受益匪淺。其中有些重要的、精髓的東西是我在別的書上所體會不到的﹐有種恍然大悟的感覺﹐也感覺和您這本書相見恨晚﹗
簡單介紹一下我自己。我叫□□﹐女﹐現在中國大陸的東北大學(這所大學正是不久前剛剛逝世的張學良老先生親手創辦的)讀研究生﹐系統工程專業。
希望能經常和您聯繫﹐並能得到您的幫助。
盼回音。


 

傳送日期: 2001年10月21日 PM 11:01
侯老師﹕您好﹗
首先感謝您的幫忙﹗我還是直接問問題吧﹗
一個 鉤子函數可以用來監控一個 Windows 的消息 ﹐那麼 用什麼方法可以來監控這些鉤子函數﹖
感謝﹗

 

傳送日期: 2001年10月22日 PM 05:17
候先生﹐你好﹗

  讀了你的大作《深入淺出MFC》以後﹐我自己對VC編程的機製有了一個比以前清楚的認識﹐但不能說是很清晰﹐因為我自己是學自動化專業的﹐但自己對編程有一種莫名其妙的ぴ迷﹐後來就學ぴ看計算機方面的書籍﹐其中的滋味只有自己能夠體會﹐許多時候總是感到自己站在一片茫茫的草地裡﹐放眼望去﹐不見邊際﹐孤立無援。那種學有所成的味道是自己所向望的境界﹐但自己知道﹐目前自己離其尚遠﹗﹗﹗
我又在網上看了先生的其他著(譯)作﹐目前只是囫圇吞下﹐要消化吸收﹐不知道要到何時﹖
不管怎麼樣﹐還是謝謝先生能夠在物欲橫流的時代作出有利大家的事情來﹗﹗﹗

 



傳送日期: 2001年10月22日 PM 07:15
尊敬的候先生你好
我有幸拜讀你的大作 《深入淺出MFC》書太好了 太好了 我詞彙貧乏只能這樣簡單的形容﹐不僅在知識上還在還在 見識上 修為上借助此書和您學了很多抱讀此書如飲佳釀
只是只能看到這一本實在是憾事 得本好書尤其像您的書太不易了
冒昧的打擾您的清修 請您指點迷津我(在北京)怎樣在中國什麼地方買到更多的您的書籍
好廢話不多說了 祝福您天天愉快

●侯捷回覆:目前出了四本書,大城市應該都有。偏遠地區可嘗試網上購書。




傳送日期: 2001年10月22日 PM 10:43
侯先生﹕你好﹗
我是一個新手。非常喜歡您寫的《深入淺出MFC》﹐我買過十幾本關於VC的書﹐您這本是我唯一能看明白的書(當然需邊看邊參考MSDN才行)﹐但您書中範例中提到為避免編譯時的警告需寫入“UNREFERENCED_PARAMETER()”語句。請問這語句的作用是什麼﹖在哪種情況下需要用到﹖因在MSDN 中未找到解釋﹐只有麻煩您了。
祝您身體健康﹗

●侯捷回覆:UNREFERENCED_PARAMETER( ) 定義於 winnt.h:

#define UNREFERENCED_PARAMETER(P) \
{ \
(P) = (P); \
} \


有些編譯器會對傳入函式而未被使用的 parameters(應該說是arguments)發出警告,如果你不想看到這種警告,可以使用上述 macro。

 




傳送日期: 2001年10月23日 PM 02:11
現職﹕網絡安全工程師
畢業學校科系﹕北京工業大學
居住省份(台灣讀者請寫縣市)﹕北京
對侯捷的建議﹕我初學VC++﹐程序中好多語句不懂 (如“UNREFERENCED_PARAMETER”﹐先生只提到這是用來避免編譯錯誤的﹐但不知在 什麼情況下才需要用﹖我在MSDN中也沒查到)﹐若不方便給出詳細解釋﹐寫明出處 也好﹗--我覺得學習VC++最大的障礙不是程序有多複雜﹐而是知識﹐概念太雜﹐例子程序中很多語句哪也查不到﹐影響了理解。

●侯捷回覆:UNREFERENCED_PARAMETER( ) 的問題回答於上。
「我覺得學習VC++最大的障礙不是程序有多複雜﹐而是知識﹐概念太雜﹐例子程序中很多語句哪也查不到﹐影響了理解」,是的,這是正確的,所以必須培養自己找答案的能力,因為不可能有哪本書能夠解答你的所有問題,何況讀者千千萬萬,你的問題不一定是他的問題,他的問題不一定是你的問題。以你所問的UNREFERENCED_PARAMETER( )為例,它是一個macro,所以必然存在於 VC(或你所使用的編譯器)所附的 header files 之中,只要使用任何文字搜尋工具(我用的是 grep utility),就可輕易找出這個 macro 定義所在。挖掘MFC source的一部份用意也在此,幫大家建立起「問題的最終解決之道」。

 

 

候老大﹕您好!
謝謝你的好書並在網上發佈電子版﹐其實你在大陸出版的簡體版《深入淺出MFC》本人已經買下來了﹐但也下載了部份電子版﹐感覺在電腦上看有時比書本來得輕鬆﹐至少可以一邊調試練習一邊領悟。希望儘快能看到你計劃中的好書出版﹗
祝 全家幸福﹗
以下附有簡單的個人資料﹕
現職﹕ 軟件開發與測試 (上海 )
畢業學校/科系﹕ 東華大學(原中國紡織大學)/ 通信工程系
畢業時間﹕2000、7
出生地﹕ 湖南 湘西
建議﹕ 感謝您對大陸軟件業的巨大貢獻和影響。希望你能在全國各地進行些講座﹐不吝傳授編程人生經驗。

●侯捷回覆:這次我在武漢進行名為「程序人生」的演講,結束前有一位聽眾提問,他直接了當地說「我們不是來聽你講這些東西,我們想聽的是技術」。我不知道為什麼「程序人生」這四個字能夠讓他聯想到技術。無論如何我都不可能在一個聽眾500人,時間2小時,免費進場、萬頭鑽動、或站或坐的場合中談技術。

「希望你能在全國各地進行些講座」,但我實在不希望再次聽到上述的質問呀 :)

你說「感謝您對大陸軟件業的巨大貢獻和影響」,這不是事實,我怎麼敢當。

 


傳送日期: 2001年10月23日 PM 04:13
侯先生:
先生的書好,讀起來爽,但想找C++ PRIMER,卻沒找到,能不能把電子版共享...盼回復

 

傳送日期: 2001年10月23日 PM 04:47
主旨: 老師您好...我是元智的學生

老師對不起打擾了...
斗膽拜託請老師幫忙...

我想請教的是驅動程式source的問題...
我的問題是有關ramdisk for win2000
我已經在微軟的網站上
http://support.microsoft.com/support/kb/articles/Q257/4/05.ASP
找到一個ramdisk驅動程式的sample...而且附原始碼(C語言)(我寄給您的附加檔案)
這個也大概就是我要的東西.....
經過win2000 DDK去compile就得到結果....
問題就是它只能最多在記憶體裡切32MB當disk....
但我要的是要能128MB....
我覺得只要改source裡面的參數應該就可以了(我猜的)...
我也試著去改過...可是結果還是一樣...
我在想..是不是改那個.C檔沒用...而是要改MAKE檔或是別的檔(也是猜的..^^)
可是我又不懂驅動程式..也不知從何改起...

我記得裡面有個ramdisk.c檔的某一行
DiskSize REG_DWORD 0x00100000 (1,048,576 1Mb)
^^^^^^^^^^^^^
我改成0x4000000(64MB)
但是它卻還是只有32MB....所以沒改成功
另外我有試過如果我給他40MB....它卻變成8MB
我在想是不是當初寫這個程式的人把它限制在32MB
如果超過就module32MB才會變成這樣...
不過這也都是猜...
因為我也試著在程式碼裡找過在哪裡有去mod32...
依然沒找到..
而且我在ramdisk.h裡的structure的成員變數的註解看到
某一成員變數;// if > 32MB
但是用搜尋整個資料夾卻找不到它被用到的地方...
也就是說它被宣告後就沒用到了*.*|||

另外我還記得RamDisk.c中有應該跟容量大小有關的變數
devExt->DiskGeometry.BytesPerSector = 512;
devExt->DiskGeometry.SectorsPerTrack = 32; // Using Ramdisk value
^^^^^
我有嘗試過改成64在ramdisk.c裡,但是還是不行.....
DDK有compile ramdisk.c檔嗎?還是這個.c檔只是給我們看的
會不會它去compile make檔或其他的檔,所以改.c沒有用?
devExt->DiskGeometry.TracksPerCylinder = 2; // Using Ramdisk value

還請老師指點迷津...拜託拜託...

 

傳送日期: 2001年10月23日 PM 04:39
學習快與否,關鍵是否有一本好書,一本如先生寫的好書,再次感謝你!!

 

傳送日期: 2001年10月24日 AM 12:41
侯先生﹐你好
近日開始學習泛型。當然免不了閱讀你的STL系列文章。
在第一篇﹐也即是大局觀﹕泛型程序設計與STL中﹐我發現了一個小bug.

page7
STL運用實例
...
但對C++社群而言﹐1994年的滑鐵盧(waterloo in Ontario, USA)標示的則是極大的成功。

上文的錯誤在於﹕waterloo是在Ontario, 但是Ontario不在USA, 而是在CANADA。
我為什麼會知道呢? 因為我就在Ontario :) welcome to Ontario.
謝謝你給我寄的書﹐那時我還在深圳呢。
剛剛離開中國沒多久﹐你的書就開始大量在大陸瘋狂出版﹐我又買不到了:((

●侯捷回覆:謝謝你的糾正。這下我可糗了。我以為Ontario(安大略)應該是在美國,還上網搜尋過呢。你確定美國沒有Ontario嗎?或你確定waterloo就是位於加拿大的Ontario嗎?

 

 

傳送日期: 2001年10月24日 AM 08:42
候捷老師﹐您好﹗

我是浙江工業大學機電工程學院教師﹐主要教機械類基礎課程﹐如《機械原理》、《機械設計》等﹐也教一些計算機程序設計課程﹐如《C語言程序設計》等。我聽朋友介紹說您的大作《深入淺出MFC》是Windows程序設計中最經典的教程之一﹐他強烈推薦我看一下﹐我找不到這本書的簡體版﹐所以在htpp:\\www.csdn.net處下載了一個電子版。不過﹐我現在還沒有讀﹐等我讀完這本書再向您反饋有關我的感受。

現職﹕教師
居住省份﹕浙江省杭州市



 

傳送日期: 2001年10月24日 AM 09:34
侯老師:
您好﹐我來自大陸﹐現在日本的一所大學留學﹐有幸在網上看到侯老師的大作﹐希望能看到侯老師的書﹐不知郵購的話﹐如何辦理。希望郵購的書是:
C++ Primer 中文版
Effective C++ 2/e 中文版(精裝)
More Effective C++ 中文版(精裝)
泛型程式設計與 STL(精裝)
Essential C++ 中文版
C++ Primer (3/e) 題解
深入淺出 MFC 第2版
Win32 多緒程式設計
COM本質論
(繁體版也行)

●侯捷回覆:臺灣出版社似乎沒有開通海外郵購。你不妨問問這些書的出版公司(侯捷網站上可查各書出版公司)。

 



傳送日期: 2001年10月24日 PM 02:47
侯老師﹐您好﹗
近來看網上對於您的評價,不知道台灣如何,恐怕大陸的許多讀者都將您看作
"無敵鐵金剛"了,呵呵!不過也難怪,大陸眾書,始終處於"剪刀+漿糊"的水準,偶爾
看到有人能耐心的沉下去,寫出些自己東西來的作者,大都會拜為崇拜偶像:)
業界始終有一種浮躁的感覺,不知道是否因為計算機發展太快的緣故,您的那
句"勿在浮砂筑高臺"我已經對很多人說過了,不過說回來,恐怕我也是這樣,沒有
辦法"沉"下來,不知道您有什麼高招賜教,萬分感謝
還請您幫一個忙,能否推薦幾本講述VXD或者WDM的書籍給我,<Writting
Windows VxD and Device Driver>我這裡找不到,而且書籍針對WIN3.1感覺
似乎陳舊些,不知道有沒有新些的(雖然酒是陳的香,技術恐怕未必了),再次感謝
:-)

●侯捷回覆:我比許多人沉穩,可能是因為我所選擇的工作,不必流波逐流。所以,浮燥也怪不得大家。不過,既然知道技術的養成必須紮實,那就無論如何要沉穩下來。

關於 VxD 和 WDM書籍,Walter Oney 各著了一本經典,上 amazon 便可查到詳細資料。

 

 

 

傳送日期: 2001年10月24日 PM 07:42
敬愛的侯先生:
我最近購買了你的大作<深入淺出MFC(第二版)>的中文版,拜讀後,獲益匪淺.這本書讓我告別了過去看講解vc++程序時只知道要這樣做,不知道為什麼要這樣做的窘況.
可是由於我用的是vc++6.0版,裡面與你的略有不同,我看到講做console程序的時候,卻不知道怎樣去做make.dat文件.我找了很多這方面的資料可是卻沒有發現,
通常都是說makefile已經是一種被淘汰的輸出模式.如果是這樣的話,我就不能夠把你的程序寫到電腦裡面體會這個過程,
望先生能在百忙之中,解答我這個對vc++充滿愛好的初學者這的這個問題.
祝先生:
身體健康!
萬事如意!

●侯捷回覆:makefile 不是一種被淘汰的輸出模式。我無法做空中教學,請到論壇上發問。或參考 侯捷散文 1999 04/08 Console 模式中使用C/C++ 編譯器

 

 

傳送日期: 2001年10月24日 PM 09:18
jjhou﹐您好﹗
晚上去華工聽了您的講座﹐一睹您的風采﹐感覺您的性格就像您的著作一樣平易近人﹐
雖然沒有什麼技術上的生活﹐但還是學到了一些做人的道理﹐非常感謝﹗
我月初時曾給您寫過兩封信﹐請教關於Inside C++ Object Model中關於NRV優化
和一個虛方法的問題﹐也在您網站上貼出的讀者來信中看到我的問題﹐
但不知為何兩個
問題都沒有答復
﹖後一個問題我後來思考﹐可能是自己理解的偏差﹐但前者令我至今
很迷惑﹐在水木清華BBS上討論也沒有什麼收穫﹐只好冒昧再次寫信向您請教。
我現在武漢讀書﹐如您收到此信時尚在武漢﹐且方便的話。我想專程去拜訪您﹐不知行否﹖
如果您行程比較緊就算了。再次感謝﹗

●侯捷回覆:我早已說過,關於我的譯作,如果翻譯有誤,那麼我有義務回答,至於其他討論,請與原作者聯絡。過去以來我回答過不少譯作上的技術性詢問,但這實在太超過我應該負擔的責任了。每個人都有每個人的工作,我必須做我的工作,其中不包括應該由原作者來回答的問題。

如果我的作品有技術上的錯誤,那麼我有義務回覆,否則基本上我只喜歡回覆方向性的、學習上的問題,並且視我個人的時間與情緒而定 :)

 

 

 

傳送日期: 2001年10月24日 PM 10:20
候老師﹐您好﹗
我是在講座後用第一版深入淺出mfc請您簽名的學生,
並是一個計算機本科專業大四的學生,

聽了您的講座,很多話都是說到我心裡去了,
因為現在我剛好處於迷茫的階段,由於家庭背景,以及自己的性格,
還有其他因素,放棄了考研,心裡有一種失落感,聽了講座後,
對我有很大的啟發.

現在整個華工有股浮糙的風氣,對於上課時有個別同學提前離開,
還有簽名時,有個同學把書遞進來時,碰到您的眼鏡,而不說"對不起",
我為這些同學表示慚愧,同時,您說過不能"以偏概全",希望您以後再
有機會來武漢的話,再給我們授業解惑.

您對青年學生的關懷,比我接觸的大部份老師而更像一個育人的
老師,但是不幸的是,我只能聽到您的一次講座,而不能更加了解你,
以來提高自己的像您說的"格調".

最後我對講座提幾個建議,

第一點:知道您名字的人,像你在書中所說,讀您的書要有一定的
知識層面和背景,希望您不管時間的多少,儘量涉及專業知識,
據我所了解的,至少有1/3的人,我能夠看出來是研究生,實際數目可能
達到1/2以上,

第二點:最後部份,大家提問,很多都是個人的問題,有些是可以從您
的講座中提到的,但是他自己不明白,這類問題太多,浪費了不少時間,
這是致使我身邊的部份研一的同學離開的原因,還是希望您的講座能多
涉及到MFC,

我多麼希望您能夠在我們計算機98系開一兩次專業的講座,但是
我知道這是不太可能的,

以下是我個人的問題:
我們大四才開 "面嚮對象的程序設計" java 等課,還不是必修的,
而現在又是考研的緊要時期,大家都沒怎麼認真學,
我不考研,所以正在抓緊時間學習C++ 和java ,正如您說,兩者之間
很多地方都相通,

我現在基本的面嚮對象的感念都懂了,比如封裝,繼承,友元,重載等,
正準備開始讀您的書,不知道您有什麼建議?

        致
禮﹗
我寫這封信,是表示對於您的崇敬,以及對您給我們來講座的感激,
同時也希望看到您的著作,謝謝您看我的信!

●侯捷回覆:無論如何我都不可能在一個聽眾500人,時間2小時,免費進場、萬頭鑽動、或站或坐的場合中談技術。我更不喜歡在一個異質性極高的場合談技術,那只會滿足小部份人,而讓大部份人枯坐而已。一個技術主題,滿足了一小部份人,另一個技術主題,又滿足了另一小部份人。

演講題目早就定了,如果不知題目就走了進來,或知道題目卻不知道「程序人生」四個字是什麼意思,那可怨不得我 :)

技術性課程(或曰講座、研討會…什麼的)是像我此次在東軟(neusoft)所進行的活動。只有在那種場合,我知道台下聽眾的背景,我知道他們全都準備好要來聽技術性的東西了,我才會深入談技術。

你很仔細,觀察到了會場的種種細節。提前離席雖然不夠禮貌,不過強留下來聽不想聽的東西,也非我之所願。大家這麼喜歡技術性的東西,下次我會在進行輕鬆話題15分鐘時之後,暫停2分鐘,讓不想聽下去的聽眾有機會離席 :) 

你拿第一版的《深入淺出MFC》請我簽名,呵呵,我記得你。

 


 

傳送日期: 2001年10月25日 AM 09:48
候先生﹕
你好﹗
在VC之門徘徊良久﹐今得拜讀你的大作獲益非淺。VC只是一個工具﹐學會用一個工具固然好﹐但是更應該悟透工具製造之理﹐要不人家的工具不斷更新﹐我們豈不是被牽ぴ鼻子走﹖
所以我覺得學會開發工具比用工具更加重要﹐這樣以後我們也可以開發出很多很多的編程語言編譯器來。但是這東西是怎麼樣開發出來的呢﹖知識淺薄﹐久思不得其解﹐望能指點一二。

 

 

傳送日期: 2001年10月25日 PM 03:13
侯老師﹐您好﹗
惶恐之至,昨日剛寫E-MAIL給您,今日又來叨擾:)
所為者二事
1.昨日請您推薦的關於VXD的書我已從您的網站上下載了SYSTEM PROGRAMMING FOR WINDOWS95,真是好書阿,感動,感動,不過仍希望能推薦關於WDM的書,原因不必多言了吧,現在作業系統都改換WIN2000了,並非我不愛98,實是因為VS.NET需要2K阿,唉 :~~~~~ (3 G的容量就如此被消耗了)
2.Exceptional C++ 中文版什麼時候可能在大陸發佈,或者已經發佈而我不知,請告知,謝謝

 

 

傳送日期: 2001年10月25日 PM 04:05
你的人格讓我很佩服和敬仰
現職﹕windows ce驅動程序工程師
畢業學校科系﹕上海交通大學自動化系

居住省份(台灣讀者請寫縣市)﹕現住在上海市
對侯捷的建議﹕
#include 致以誠摯的謝意和敬意   



 

傳送日期: 1999年10月25日 AM 08:15
候先生﹕您好。
早就聞得先生在C++領域已至“求敗”之境。近日喜得先生《深入淺出MFC(第二版)》讀來頗感先生的確“功力非淺”。
但不知先生對C++的底層技術﹐諸如對象創建的“邏輯空間->物理空間構型生成”等問題是否有研究﹖
吾欲與先生討教兩招﹐先生是否有興趣﹖
若先生不吝賜教﹐以先生回復為盼。

此致 敬禮﹗

●侯捷回覆:我沒有興趣 :)

業界工程師的項目(project)實作能力肯定都比我強 — 我一直以來都抱持這種態度,哪裡談得上「求敗」?CSDN上有網友發帖說「侯捷做過什麼大項目」,挑釁味十足。呵呵,我不在編程第一線已經10年,該帖有什麼意義?臺灣的項目(project)大陸聽過嗎?

這樣好了,我也問一個問題。米盧現在是大陸家喻戶曉的人物,請問:「米盧踢得幾次雷米金杯」?

米盧是教練呀,又不是球員。

對極了,他是教練,不是球員。

我這麼說,希望點醒一些人,別把自己的人生弄得太狹隘了。

以上是回信時的聯想,不是針對來信人 :)


 

傳送日期: 2001年10月26日 AM 09:35
侯先生﹐你好

近日開始學習泛型。當然免不了閱讀你的STL系列文章。
在第一篇﹐也即是大局觀﹕泛型程序設計與STL中﹐我又發現了一個小bug.

page2

class rect
{
friend ostream& operator<<(ostream& os, const rect& rhs);
public:
rect(int w, int h) : _w(w), _h(h)
{ _area = _w * _h; }
bool operator<(const rect& rhs) const
{ return _area <
rhs._area; }
private:
int _w, _h,
_area;
};

因為_area是個private member, 所以rhs._area是錯誤的。
瑕不掩瑜﹐呵呵

●侯捷回覆:你錯了,首先這個例子是可以執行的,那就證明我沒錯。
其次,為什麼沒錯呢,因為在一個class中,member function 當然可以處理private data members。

我很奇怪,說別人錯誤之前,自己是否曾經驗證過自己的正確?這些都是小處,卻反應治學態度是否嚴謹。一個未經自我驗證的帖子,浪費了我5分鐘,10個這樣的帖子,就浪費了我一小時。這會打擊我回答讀者來信的熱情。

 

 

傳送日期: 2001年10月26日 PM 02:28
侯老?,您好
我是一名大????加工作的Programer,
在csdn??了您的?像站?,?提有多高?了,
一口?把您站上的所有??(包括?子?)全部DownLoad下?,
在此感?您的慷慨,
我?了您的<<深入?出MFC>>和<<Essential C++ 簡體中文版>>,
真是如?至?,??啃完??本之後,再?您的<<深度探索 C++ 對象模型>>等??看,
您在??裡推?的?籍,也是我???的首?,
希望您在保重身?的情?下,多出幾本?,????我?探索程式??的?秘,
?切盼望您的所有?都能有??版.

祝 心情愉快,
一??程?好者
2001/10/26

 

 

傳送日期: 2001年10月29日 PM 02:57
侯老師:
你好﹗﹗我是一名大學生﹐我很想學編程﹐但不知如何入門﹐這麼多的語言﹐我不知道學哪一種﹐希望老師指點。
中國大陸 上海

 

傳送日期: 2001年10月26日 PM 07:15
敬愛的侯先生,我買你的書看了一個月,收穫不小,到現在為止,我已看完了前五章,大部份都看的懂,但還是有個別的位置有不懂的地方,如六大技術仿真之系統初始化中,
有一句m_currentwinapp=this;不知THIS是代表什麼意思你可否告訴我不甚感激
你的讀者:ARNOLDMJW
祝你工作順利

●侯捷回覆:this 就是喚起 member function 的那個「始作俑者」。

 

 

傳送日期: 2001年10月26日 PM 09:28
主旨: 對於撰寫 Windows Driver 的發展工具軟體可否給些意見?

> 侯老師:
>
> 我叫□□□, 工作於一家ISDN電話機的公司裡,
> 擔任軟體工程師(雖然我很強調我是"韌體"工程師, 不過... 沒幾個人懂).
> 目前我手邊的工作是要寫一個 Windows 98 USB to Serial port Driver.
>
> 但是, 打從高中就很明確的把自己跟微軟的任何程式設計斷絕關係,
> 全心投入硬體晶片上的驅動(韌體)及週邊電氣特性整合, 如8051...
> 不過, 在還沒要寫這個 Driver 前, 我也是有買了一本老師譯的
> "Windows 95 系統程式設計 虛擬機器與VxD程式設計",
> 當時只是對 Windows Driver 的設計有感興趣所以買了這一本,
> 說實在, 我只看了快 1/3 而以, 離會寫還差的很呢!
> 因為, 我也認為知識是可以觸類旁通的!
>
> 話說回來, 現在的工作上, 我需要去寫微軟的程式,
> 而且一開始接觸就是 Windows 底層的 Driver...
>
> 雖然一步一步的打基礎, 會比較好, 可是,
> 第一, 我連如何怎麼入門, 都還沒有頭緒!
> 第二, 開發的時間應該沒有長到等我學會了, 再寫!
>
> 所以想請教侯老師:
> 1. 是否有哪些書籍比較詳細的解說 Windows 系統結構?
> 中文似乎不多, 除了老師的那本, 另外我還有一本 WDM 驅動程式設計手冊, 葛湘達譯
> 而它的原文書我也有, 其它的原文書有
> Programing the Microsoft Windows Driver Model, Walter Oney
> 及USB Complete 2e, Jan Axelson, 這些書而已.
> 原文書讀起來實在很吃力, 吸收的速度很慢, 而且有很多不懂的地方,
> 不過, 總是比起 DDK 的 Help 所講述的要好了許多.
> 如果老師有開課, 請老師告訴我您會在哪開課? 是否可旁聽?
>
> 2. 是否使用發展工具軟體, 會更快的完成 Driver 的撰寫,
> 可否建議一套工具軟體. 軟體公司會提供原始碼, 或接受外包的 Case 嗎?
>
> 3. 老師是否可以介紹幾位會寫 Windows Driver 的人士給我,
> 因為最後寫不出來就只能用外包的方式, 請人寫一個 Driver 了.
> (這是最不好意思要請您幫忙了, 因為我認識的人都沒人會寫)
>
> 另外, 可以再請教老師一個問題嗎?
> 那就是, 國內會寫 Windows Driver 的人大概有多少??(比率之類的)
> 因為老闆總覺得那是很簡單的, 不乏設計它的人才, 資料也滿地...
> 而自己學起來沒有一個頭緒, 加上英文能力不佳...
> 唉! 好大的壓力喔!!!
>
> 最後敬祝老師 身體健康
>
> 一個 Windows 程式設計要重新學習的讀者 敬上

●侯捷回覆:VxD 和 WDM 的書籍,以 Walter Oney 所著的兩本書最為經典。詳情查 amazon。
會寫 Windows driver 的人不多,他們收入都很好。你上BBS發個帖子,應該可以找到人。

 

 

傳送日期: 2001年10月27日 AM 11:39
侯捷老師﹕您好﹗
我是個碩一學生﹐剛剛開始學習C++﹐從網上認識了您﹐購了您翻譯的《Essential C++中文版》和《Effective C++中文版》.問兩個問題﹕
1 最新版的<<The c++ progamming language>>(簡體)和<<c++ Primer>>(簡體)在哪裡可以購到?
2 就現階段(作為入門)我比較合適用什麼版本編譯器,針對VC與C++Builder?(我想同時學習兩種編譯器)

 

 

傳送日期: 2001年10月27日 PM 03:58
侯老師您好﹕
前些日子買了一本您譯的《Essential C++》﹐因為是初學﹐所以到現在還沒有讀完﹐不過在學習的過程中發現了兩處不當的地方﹐也許是我才學膚淺沒讀懂﹐望侯老師指教﹕
1﹕第71頁的模板函數﹐函數的參數是兩個CONST指針﹐而返回值卻不是﹐這樣行 嗎﹖在我的VC6.0上怎麼編譯不過去﹖
2﹕第92頁第9行的word[tword]++是不是應該改為word_exclusion[tword]++ 。
如果是我的錯誤﹐還望侯老師指正。不勝感激﹗

●侯捷回覆:第一個問題的確是英文版的錯誤。請見侯捷網站上的勘誤表。
第二個問題是你的誤解,書上並無錯誤。

 

 

傳送日期: 2001年10月27日 PM 07:57
侯老師﹕你好﹗
我是一個計算機系的大一的學生﹐是民辦的﹐我想學一門語言﹐你認為學那一門比較好和發展前景比較好。我以前接觸過pascal和c語言只膚淺的。現在語言很多﹐我都迷茫了不知道學什麼比較好﹐麻煩你給我指點一下好嗎﹖並給我介紹一教材和學習的方法。恭後你的回音﹗
── 一個編程愛好者

 



傳送日期: 2001年10月28日 PM 04:16
主旨: 問候

> 親愛的 侯大哥 您好:
>
> 不知道該怎麼樣向您介紹自己, 其實自己也不是重要到哪裡去, 但在看過您網站中
> 有一篇"我的電腦探索"的文章後, 讓我更加想要多認識您.
>
> 弟目前無工作, 同樣是唸土木出身的我, 也僅是專科學歷, 但對電腦上的學習一直
> 有很高的興趣, 所以今年幸運的可以考上景文資管系進修推廣部就讀.
>
> 由於目前老師正在教導C++, 而我自己也有去坊間教育訓練中心上Java的課程, 所
> 以最近兩個月來, 一直在接觸OO的語言, 而在此之前, 在一家系統整合公司擔任系
> 統工程師職務, 進而學習到另一個OO語言-Python, 個人對這三的語言並沒有很深
> 的了解, 更沒有開發的實務經驗, 一直都是看書上的source code在學習, 在此想
> 請教侯大哥, 是否有接觸過 Python? 若有, 有機會為 Python 寫一本中文書嗎?
> 或翻譯書也行...:)
>
> 最後, 祝福侯大哥事事順心, 待弟找到工作後, 會將您有關C++翻譯書輯買齊, 好
> 好研讀與學習.

 

 

傳送日期: 2001年10月27日 AM 11:42
侯老師你好﹕
我是一個剛學VC不久的人﹐對c++﹐VC有了一定的了解﹐有了C++的基礎想在深入地學習MFC﹐我買了《深入淺出MFC》但在後面的章節中﹐理解起來有點困難。希望你能推薦幾本的C++、VC的書。最好是中文的。
謝謝





傳送日期: 2001年10月28日 AM 11:00
侯Sir﹐您好﹗

一路順利吧﹖可惜時間太緊﹐只能跟侯Sir見上一面﹐沒能好好聊聊﹐只好用email了。

有兩個問題想請教一下。
TASS中前言﹕C++標準庫中屬於STL者
恐怕沒有90%吧﹖按The Standard C++ IOStream and Locales序言裡的說法﹐以佔標準書的篇幅算﹐STL佔1/3﹐IOStream佔1/3。
C++標準庫﹕“致謝”中Herb Sutter“它”﹐是不是應為“他”呢﹖

侯sir這次大陸行的感想﹐一定會寫出一篇《西行漫記》吧﹖:-)我想在C++ View上刊出﹐不知道可以嗎﹖

另外聽□□說﹐TASS已經差不多搞定﹐快出版了﹐真想看看。轉成簡體的事情﹐我感覺如果□□時間太緊的話﹐□□□做是最好的(嘿嘿﹐我也順便可以先瞧瞧了)。算我多嘴﹐相信侯sir心裡已經有適合的人選了吧:-) 順便說一下我對TASS的看法﹐我很期待。不過從配置器一章來看﹐不知道是不是似乎過於注重細節了﹐或者是我太懶看不下去﹖:-)
  
●侯捷回覆:90%只是一種概念,一種感覺,何必當真?你也可以說它是80%或70%,或83.141592653%。就像80-20法則也有人說90-10法則。不過,IOStream肯定不佔C++標準程式庫的1/3。C++ 標準規格書的 1/3篇幅,完全不表示 C++ 標準程式庫的 1/3體積,這個小小的道理你不可能不懂。

即將有一篇「2001大陸行」發表於侯捷網站 — 那就表示可以自由轉載。

TASS(The Annotated STL Sources)講的全都是細節,不然怎能說是《STL源碼剖析》 :)

不論我把TASS交給什麼人轉譯,你都不可能「順便先瞧瞧了」。我絕不會把任務交付給「會私自將資料流出」的人 :)

 

傳送日期: 2001年10月28日 PM 04:18
侯捷老師﹕
您好﹗
10月27號第一次給您寫信﹐覺的說的不夠清楚﹐又寫了第二封﹐見笑了﹗
我是在杭州(我覺的優美的自然環境對寫程序的人很重要﹗你說呢﹖)就讀的一位剛入學的研究生﹐從本科畢業後直接考上﹐專業都是計算機﹐在本科的時候太側重基本理論﹐加上考研的壓力﹐真正訓練編程的時間很少﹐也就用過C語言編過幾道作業題﹐用學過的很少的VB做過畢業設計的小課件。
現在到研究生階段了﹐我想是認真培養自己編程能力的時候了﹐我(就這幾年)想主攻C++,現在在看錢能的<>,還用TC3.0呢!
我自己數學較好,不怕吃苦,年輕,23歲,也有了專用的電腦(入了校網),可面對一大堆計算機編程方面的"爛書"頭痛不已,不過很榮幸(首先感謝網絡!),真的有這樣的一個"你"存在!我不好再重複什麼內容了,免的浪費您的時間!
現在先問幾個最緊迫的問題:
1 就目前我該用什麼版本的編譯器,分別是VC與C++Builder,作為我的初級階段學習與訓練?
2 針對上面的編譯器,有哪些較好的書,比如介紹作者也行(您要有就更好了) ,圖書館裡這樣的書是有,可精品太太少!
3 就目前,哪裡可買到最新版的(簡體版)<>與<>
就些問到這,呵呵!還有慇切期盼您到杭州來講學!

此致! 敬禮!
來自杭州的學生
2001.10.27



 

傳送日期: 2001年10月28日 PM 11:38先生﹕
您好﹗我是一名大陸的讀者。
當我剛開始接觸C++的時候﹐朋友向我推薦了您的《深入淺出MFC》這本書。
您讓我體會到什麼是“滿卷詩書喜欲狂”的感覺﹐您在書中所講的正是我所想知道的﹐想要的。
我偶爾也會去AMAZON瀏覽一下關於C++編程方面的書籍﹐但由於我的英文水平不高﹐外加剛開始參加工作收入有限﹐那裡的書對我來講有點奢侈而不實。今天訪問了您的站點﹐又下載了幾篇文章。
真的非常感謝您﹗感謝您給許多像我這樣的年輕人提供了學習的寶貴機會。
再次對您這樣
真誠、偉大的人表示敬意﹗並沿ぴ您的牽引邁步前進。

●侯捷回覆:謝謝你的讚美。我很真誠,但絕不偉大。滿卷詩書喜欲狂,你用的讚美詞令我開心。

 

傳送日期: 2001年10月29日 AM 08:40
尊敬的侯捷先生﹐

《Effective C++中文版》簡體版 第77頁中﹕倒數第二行有“對象以傳值(by value)方式”﹔倒數第一行有“定義所謂傳值(pass by value)的意義。”

同是“傳值”﹐一個是 by value﹐一個是 pass by value。

倒數第二行的“對象以傳值(by value)方式”是否應該改為“對象以傳值(pass by value)方式”?

我不知道這是簡體版的錯誤還是有其如此的原因﹐請您批評指正。

●侯捷回覆:由於傳值動作有 pass by value 和 return by value 兩種,所以許多時候都只說 by value來取代 pass by value 和 return by value。by reference 也是同樣道理。

看書不要這麼重視這種細節呀,這又不妨礙你的理解。


 

傳送日期: 2001年10月30日 PM 02:53
侯先生﹕
您好。我在讀您翻譯的簡體中文版的Essential C++.也買了您在內地出版的幾本書﹐味道不錯﹐
我一向覺得書寫的有趣而認真﹐才具有了相當的可讀性﹐所以你的書我看的比較喜歡。
讀您的EssentialC++發現有一個小小的錯誤﹐也有一個問題﹕
錯誤是﹕p80頁﹐L18。[first , last )應該是[first , last]吧。
有一個問題是在3.1節中出現的幾個find例子程序﹐我在VC6.0下面都編譯不過的。比方這個
int * find(const vector<int> &vec ,int value )
{
for( int ix = 0 ; ix < vec.size() ; ++ix )
if( vec[ ix ] == value )
return &vec{ix} ; /*我覺得應該改成 return ( int * ) &vec[ix]
return 0 ;
}

●侯捷回覆:[first , last )並沒有錯。
3.1節的例子的確是英文版的錯誤,請見侯捷網站上的勘誤表。

 

 

傳送日期: 2001年10月29日 PM 09:43
主旨: For help!

> Well-beloved Sir Hou:
> Nice and excited to write to you!
> I'm your faithful reader,I am interested in reading your books!
> Of course only the simplified Chinese Editions,for they are available in Chinese Mainland,鉖,What a pity! I have bought all your books published in simplified Chinese,and get a lot from them,so I can't help saying:"thanks a lot."
> By the way,I'm sorry to trouble for a tiny question.In the book ▲Dissecting MFC◎you present the use of "
Grid Control",but I can't find the control in Visual C++ 5,so it is in in Visual C++ 6.Why? Can you tell me?!Thank you very much.
> Moreover,can you receive the mail well and truly if I write to you in simplified Chinese?
> That's all,thanks!
>
>
> liuxianguang
> university of petroleum (East China)
> 2001/10/29

 

 

傳送日期: 2001年10月30日 PM 02:07
侯老師﹕
您好﹐當我在海淀書城看到了那條標語我就感覺到了您的存在。我家在廊坊﹐一個離北京最近的城市﹐然而我的計算機水平一塌糊塗。我知道您精通MFC﹐WINDOWS PROGRAMMING。我想知道如何才能進入程序界﹐我只是發現我的興趣所在﹐沒有利益驅使。我時刻關注ぴ您在北京的動向﹐也時刻緊鎖MSDN﹐對了說到這個網站。我總有一種高山仰止﹐景行行止的感覺。我的專業是電力系統﹐可我一直喜歡計算機﹐我週圍沒有與我喜好相近的同學。所以儘管我很努力﹐仍沒有多大長進。我希望您可以給我點幫助。您認為學校的基礎教育(計算機類)用處有多大。我在秦皇島燕山大學﹐我們學校不如北京的學校教學質量高。我感覺您很淵博﹐可不可以讓我參考一下您每天的計劃表﹐您的《深入淺出MFC》很好﹐可是csdn 程序員大本營2001微軟版有一篇文章MFC 五大批判。在北京有許多書看﹐台灣也很多吧。多摸希望我們都去大城市。所以對於國內教育體制我考研﹐我選擇北京理工計算機科學與工程系。您是台灣清華大學畢業的﹐國內清華也是最棒的﹐可是對我而言我肯定考不上﹐對了不知,台灣年輕人在忙什麼﹐給我感覺很好﹐我覺得台灣有許多真正華人應有的品質﹐多希望我們可以多交流一下﹐我認為技術無國?
紓□還□□嗝從馗闆6伕夜■詰某絛蛟焙孟蠖際親畈黃降娜巳骸?■銜□淺齬■□昂沒故竊詮■詿蟪鞘瀉茫□旎蛉аㄍ澹□愀邸?抑□牢依}■茉叮□喚齟蛹際跎希□譔~希□□ㄈ宋木□襠希□堜`惱鋁釵銥春蠛蓯娉□□比還■詰南□閹□降娜犯喜簧咸ㄍ逑衷淞?APEC開完了。台灣沒來得是政府官員﹐但迎來了您。這多摸好。我真希望可以見到您﹐可以和您促膝而談﹐談編程﹐談計算機﹐談人生﹐談。。。我不明白為什麼人生下來就有許多不同﹐三六九等﹐有好學勤奮的﹐有自甘墮落的﹐有不甘平庸的﹐有腰纏萬貫的﹐有清貧終日的。我屬於那種呢﹖我屬於明知自己是阿甘還不願放棄的。:)
我覺得您的文章像是散文﹐有像是詩歌﹐很值得品。可不可以告訴我您認為對您終生有幫助的幾本書和網站。我慇切希望您的答復﹐謝謝﹗張學良先生去世了﹐小生深感悲痛。我只是悲傷一個真正的強者死去了﹐說遠了﹐您有沒有涉獵過DELPHI,JAVA,C#,.NET還有別的。你起初如何學習編程的呢﹖您是個職業工作者﹐還是自由工作者﹖我不想您太勞累﹐所以您可以不全回答﹐因為這是第一封E-MAIL﹐我先不問您過深的技術問題﹐只是想知道生活基本情況﹐可以嗎﹖我家生活水平一般﹐普通市民。但爸爸耽誤了10年﹐所以我希望和姐姐都有真正意義上的生活。
祝您﹕
身體健康 一路順風﹗
大陸的小朋友﹕□□□

●侯捷回覆:我感受到你的熱切,但無法一一回答你的詢問。請看侯捷網站上的諸多文章。

 

 

傳送日期: 2001年10月29日 PM 04:12
我是您的讀者﹐深深感謝您允許免費下載《深入淺出MFC(e2)》﹐作為受惠者﹐特向您提供我的個人資料﹕
居住省份﹕陝西(暫住)
建議﹕希望您在您的個人網站上號召大家進行
《深入淺出MFC》的簡體版翻譯工作

●侯捷回覆:??????????

 

傳送日期: 2001年10月28日 PM 03:51
侯老師﹕你好﹗
我叫□□□﹐現在供職于北京一軟件公司。在網上久聞你的大名﹐我也是你的忠實的讀者。
我幾乎給自己訂了一個買書的標準──非侯老師的不要﹗我常到你你的網站去看﹐希望你能
為我們這些電腦愛好者翻譯和編著出更多更好的圖書。只是我學C++不久﹐現在正在努力的
學習﹐希望得到你賜教。
百忙之中打擾您﹐祝侯老師身體健康﹐萬事如意﹗



傳送日期: 2001年10月27日 PM 08:45
侯先生﹕
您好﹐我從http://www.csdn.net/expert/jjhou/下載了您開放的電子書。
當然﹐您出的所有簡體中文版的書我都買了﹐呵呵﹐定價還真不低﹐不過除了
前段時間版的深入淺出外印刷質量都很好
(今年4月那版的深入淺出和我剛新買的
今年9月的版本印刷質量相去甚遠)
﹐希望早日見到您更多的著作。
以下是我個人資料﹕
研究生﹐清華大學土木工程系計算機研究室﹐22歲﹐男﹐廣州人
建議嘛﹐呵呵﹐希望早日恢復無責任書評∼∼∼



傳送日期: 2001年10月31日 AM 09:19
畢業學校科系﹕中國沈陽東北大學研究生院計算機應用專業
居住省份﹕中國遼寧沈陽
建議﹕我剛讀了您譯的《Essential C++》﹐這是太精彩了。我還要繼續讀你的寫的和翻譯的書。





傳送日期: 2001年10月31日 AM 11:16
我是西安一名??工作的Programer,
近日買了您的<<Effective C++ 2/e 簡體中文版>> 和 <<深度探索C++對象模型>>,
兩本書交叉對照??,感受?位世界級大師從不通的角度?C++中的相通的東西
(兩本書中部份內容相同,但立足點不同),
感覺受益非淺,再次感謝老師.

<<Effective C++ 2/e 簡體中文版>>中,第151頁,有一句話如下 :
"如果你是
犬儒派學者(Cynics: ......"
~~~~~~犬儒是否為
印刷錯誤,請老師看看.

●侯捷回覆:並非印刷錯誤,臺灣對於 Cynics 學派就是這麼翻譯的。
BTW,我常在CSDN上看到大陸網友說某某書「印刷錯誤」,不,印刷是不會有錯的,錯誤的是原稿。可能是筆誤或技術錯誤或觀念錯誤,但印刷是不會有錯的。

 


傳送日期: 2001年10月31日 PM 01:45
候老師﹕
 您好﹐我就是上次跟您的EssentialC++找錯的那名天津學生﹐很高興能收到您的回信﹐其實我在發完信後沒幾天去您的網站看了看﹐在errta中發現已經有人提出了這個錯誤。也是我那天發現這個小錯誤後太高興了(主要是因為總算找到能給您寫信的理由了:-) )﹐以後我會注意的。
 另外﹐我還要跟您說一件事﹐就是在給您寫完信之後﹐我回學校辦事﹐在住招待所的時候﹐碰見了另外一名學生﹐當我得知他是華中科技大學的學生的時候﹐簡直就是高興極了。因為那段時間考試﹐因此沒有去清華聽您的演講﹐覺得非常可惜﹐又知道您又在華中做演講﹐於是趕緊告訴那位學生﹐非常巧﹐他也是學土木工程(與您以前的專業一樣)﹐那天晚上﹐我跟他說的話題裡面幾乎都是有關您與C++的﹐並讓他在回武漢後替我聽您的這場演講。昨天﹐收到他的回信﹐告之您的演講他已聽過﹐覺得非常受啟發﹐尤其是您強調的一點是
每個人應當儘快地找到自己的興趣與天賦所在﹐努力朝自己的理想和目標奮鬥。很遺憾的是﹐由於教室裡站的人比坐的人還要多﹐最後沒能找到機會轉達我對您的問候。
 候老師﹐我現在每天都要拿出一小時的時間看Essential C++. C++對我的吸引力從來沒有像現在那麼大。

候老師﹐希望您以後能常來大陸辦講座﹐我們都在這裡熱切的期盼。
此致  敬禮

●侯捷回覆:你是如此有禮,我收到這封信十分開心。你對C++有了興趣,而興趣帶來熱情,熱情帶來卓越。只要堅持,你就會成功。

 

 

傳送日期: 2001年10月31日 PM 03:08
主旨: 請教問題

侯捷先生您好:
敝姓藍,幾個月前拜讀您以前的翻譯作品"Win95 系統程式設計 - VM &VxD",對於其中的 Serial Port 程式感到興趣。剛好公司目前正在從事 USB To RS232 便興致來潮的嚐試撰寫驅動程式。這幾個月來藉由此書獲益良多,驅動程式也大致完成(傳遞Keyboard沒有問題)。然而,在最後一階段利用 HyperTerminal 傳遞檔案時卻發生失敗。檔案接收時沒有問題,傳遞時只能傳遞 1K (1024 bytes) 後便失敗了。找了許久也不知所以然,於是便厚著臉皮的寫信向您請教。不知您有無一些建議或參考書可以介紹。
謝謝!!!

●侯捷回覆:抱歉,我幫不上忙。

 

 

傳送日期: 2001年10月31日 PM 05:10
主旨: 請問gcc/g++

侯老師您好:
請問能夠在c/c++的source裡面直接call library嗎?
如同在kylix上面可以這樣使用library
function test:integer;external '/path/libxxx.so';
如今我有一個binary file以如下的方式compiler
g++ -o x go.o liball.so libX11.so libXext.so libXv.so libpthread.so...etc.
其中liball.so是此應用程式的source裡面的所有.o檔包好的.so
其他的都是系統本身的library..屬於/usr/X11R6/lib及/usr/lib
由於kylix每call一個library一定要配一個function??(語法好像很固定?)
所以我現在有個想法...e.g: 在x.h檔裡面去call library..
在x.c內#include "x.h"
然後把x.c包成一個libx.so
不知此法是否可行?
若可行....請問一下在c source裡面是否有類似kylix那樣的語法能call library呢?
感謝您的抽空回答

 

 

傳送日期: 2001年10月31日 AM 09:17
侯老師﹐你好﹗
我從“MFC深入淺出”上知道你的信箱的。我正在做一個類似windows系統的鼠標驅動﹐由於這是我第一次寫驅動程序﹐我實在不知道該從什麼地方入手。不知你能否給我一些相關的建議或我應該看那方面的書﹐查那些資料﹖

●侯捷回覆:我的書名是《深入淺出MFC》,不是《MFC深入淺出》— 真有這本書,千萬別張冠李戴。

我研究 VxD 的寫作,完全是為了 system programming;對於 drivers,我是陌生的。不過我知道,Waltor Oney所著關於VxD和WDM的兩本書,是極佳書籍,也有不少範例。Windows DDK也附有不少範例。書籍詳情,去amazon一查便知。