C++ Primer 答客問 (1)
Don wrote (1999/10/02):
> 侯老師!!
>
> 我是一個 C++ 初學者,聽說 C++ Primer 這本書不錯
> 於是就買了您的大作,但是:
>
> 一、這本書一開始我就看不懂了!!
> 尤其第二章,那是必需先有一些基本知識的人才看得懂的!
第二章章名「縱覽 C++」,是讓你對 C++ 的特性做一個總覽。
本書前言 p.xv 第二段(我還特別 highlight 起來)說:
-------------------------------------------------------------↓
第二章的配速有點快,部份讀者可能會覺得無法負荷。如果是這樣,
我建議你不妨跳著讀,稍後再回頭仔細看。
-------------------------------------------------------------↑
本書第一篇 p.2 又說:
-------------------------------------------------------------↓
「在第一篇中,我對整個 C++ 語言做了快速的瀏覽。我的目的
是提供語言特性的導入,如此一來我們就可以在完全面對這些
性質之前,比較無拘無束地取用其中一些觀念。例如,在第 13 章
之前我們並不會細看 classes,但如果等到那個時候才談及
classes,我們會有很多難以表現的或不恰當的程式實例。
對整個語言先做一次淺嚐之旅的第二個理由是基於美學的考量。
除非你先讓自己曝露於貝多芬奏鳴曲所呈現的美感與複雜度之下,
否則明顯無關聯的細節如升半音、降半音、八度音階、和弦…等等
必定令人呵欠連連。但是在精通那些細節之前,我們又沒有辦法
「做音樂」。程式設計也一樣,踩踏著迷宮般的「運算子優先權」
或「標準算術轉換規則」,對於精通 C++ 程式設計而言,是一種
必要(但也一定令人生悶)的基礎。
-------------------------------------------------------------↑
此外本書第一篇 p.3 最後一段說:
-------------------------------------------------------------↓
「部份讀者可能會認為,第2章過於粗糙,許多呈現出來的素材並
沒有完整的介紹。完整的介紹其實出現在後繼各章中。如果你發
現自己開始有點被淹沒或難以忍受的感覺,我建議你略讀本章就
好,或甚至跳過。直到你對那些素材更加熟悉,再回頭重讀這一
部份。第3章起,我要展開傳統的敘事體步調;對第2章適應不
良的讀者,我建議在這裡整軍經武,重新出發。」
-------------------------------------------------------------↑
> 二、我所使用的是 VC++5.0
> 裡面的程式碼,幾乎是都不能 compile 過的
> 像是 string abc 之類的宣告不能用
> complex 的宣告也不能用!!
>
> 我都搞不清楚是誰的錯,mcrosoft 還是 C++ sandard !!
> 但是重點是在,我不能使用來寫能用的程式啊!
> gc++是否有相容性比較高呢??
請看這個沒有錯誤的程式 :
// BCB : bcc32 test.cpp
// VC : cl -GX test.cpp
#include <string>
#include <iostream>
#include <complex>
using namespace std;
void main()
{
string abc = "this is a test";
cout << abc << endl;
// a pure imaginary number : o + 7i
complex<double> purei(0, 7);
cout << purei << endl;
}
我猜你沒有加上 using namespace std; 這一句。
本書導讀 p.19 的 <範例程式注意事項>,我列了三項,
其中第二項說:
-------------------------------------------------------------↓
您可能需要為許多程式加上一行 using directive std;(其意義
請參考 8.6.4 節),可加在所有 #include 指令之後。
-------------------------------------------------------------↑
而 8.6.4 節的最後一段指出:
-------------------------------------------------------------↓
本書之中,為了保持程式碼的精簡,同時也因為許多實例是在
未支援 namespaces 的編譯器上編譯,所以我並未在程式碼中
明白顯示必要的 using declarations。我假設程式碼中應該
都有針對 namespace std 成員所需要的 using declarations。
譯註:讀者如果想要編譯本書所附之範例程式碼,請特別注意這一點。
-------------------------------------------------------------↑
你詢問各編譯器對於 C++ Standard 的相容性。我想除了
template 以及 STL 兩部份外,各家編譯器對 C++ Standard
的支援程度都是差不多的。至於這兩部份,我先前在 CompBook 版上
的文章曾經提醒過大家。
對《C++ Primer 中文版》(侯捷譯/碁峰/1999)的任何問題,
歡迎來信(或版上公開)討論。如果您是初學者,不具備跳躍閱讀
的能力,我希望您按照書籍的閱讀動線,仔細閱讀,然後才提出問題。
謝謝。
--- the end
--
※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: jjhou@ccca.nctu.edu.tw