精華區beta C_and_CPP 關於我們 聯絡資訊
和大家聊聊這本書的一點心得。 p23 提到 Cpre (1981 第一個發佈版本), 這是 c with class 的 preprocessor。 p34 說明 this 為什麼是 this 而不是 self (取自 simula), 為什麼是 pointer 而不是 reference (因為這時候還沒有 reference) c 語言的 f(void), 竟然是被 Bjarne 所遺棄的語法, c++ f() 相當於 c f(void), 這是 和 c 不同的地方, 也就是和 c 不相容, 所以 c++ 真的是另外一種語言。 2.7 (p37) 這應該是很多人的疑問, 為什麼是架構在 c 而不是發明一個全新的語言? Bjarne 大約用了兩頁在說明原因, 並提到從 simula, algol68, bcpl 那裡「偷」了什麼 特性用到 c++ 中。 2.8.1 介紹了 -> 來代替 *, 這是為了改善 c 的宣告語法, 我的老天, 還好最後 Bjarne 沒這麼做。int v[10]-> 等同於 int *v[10], int f(char)->[10]->(double)-> 對於習慣 c 宣告的我來說, 這似乎也不怎麼高明. 讓 typedef 來對付複雜宣告就好。 c++ 一開始被取名為 C84 (一點都不威阿), 後來 Rick Mascitti 提出了 c++ 這個名字 (真是厲害), 這個名字看來厲害多了。 g++ 1.13 在 198712 公佈, 這是第一個 g++ 版本。 cfront (1984/08 第一個發佈版本) 1986 移植到 pc/at, cfront 並不是 c++ compiler, p59 有張圖可以了解 cfront 的角色, 簡單說透過 cfront 產生的原始碼還要 經過 c compiler, 所以才叫 cfront。 c++ 的設計理念之一, 『你只需要為你用的東西付出代價。』用上 class, 和 c 的 struct 一樣, 不會有任何負擔, 加上 virtual function, 呃 ... 這和 c 就不同了, 得 付出一點代價。 p77 介紹了對於 operator[]() 這個 operator 重新定義時會有的問題, 以 string 為例 子, 引入了輔助用 class 來分別處理左值、右值, 真是巧妙。 garbage collection 在 2.13, 3.9, 10.7 被談到, 尤其是 10.7 花了不少篇幅在討論 garbage collection 所帶來的空間/時間開銷, 這會讓 c++ 威力大減。只提出了 optional garbage collection 的概念, c++11 似乎要加入這個, 我不相信魚與熊掌能兼 得, 希望這功能是可以關閉的, 而不是強迫使用。 3.8 對於 const 這個關鍵字的意義在 c 和 c++ 有所不同, 不過 const 關鍵字可是由 Bjarne 引進到 c 的, 意外吧! 不過當時使用的是 readonly, writeonly 這兩個關鍵字 , 最後是由 ANSI C 改用 const 而成為 C 標準, 這是 Bjarne 第一次的標準化經驗 (對 象是 c 語言), 不過 c 的 const 無法使用 const expression, 和 c++ 的 const 語意 所有不同。 ex: const int max = 14; int a[max+1]; 在 c 無法這樣使用。別再說 c++ 改變了 c 的 const 用法, 而是 ANSI C 標準委員會沒 有採納 Bjarne 的 const 用法。 3.11.1 // 則是由 BCPL 的注解風格, 因為還蠻好用的, Bjarne 就引進了 c++, C99 也支援這個 注解風格。 3.11.4 在探討 initialization of global objects, Bjarne 並不是只考慮完成這功能 , 還要考慮效率問題, C++ 的設計原則: "a C++ feature not only has to be usefuel, it also has to be affordable." 這個 c++ 特性不只要有用, 還要能負擔的起 (直翻就是這樣, 完全沒有美感, 請原諒我) 。而這個解決辦法會帶來效率上的問題, 所以才說負擔不起。這個方法是 Jerry Schwarz 所提供。現在的 c++ 似乎已經解決這問題 (我不確定)。 有興趣可參考完整圖文: descent-incoming.blogspot.tw/2014/01/books-design-and-evolution-of-c.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.151.71
uranusjr:所以 C++ 用 this 而非 self 的原因是? 01/06 01:24
littleshan:因為 simula 用 this 啊 01/06 01:51
yoco315:好文耶 01/06 11:00
uranusjr:就只有這樣喔, 我還以為是有什麼理由... orz 01/06 12:47
ukjhsa:好文推 01/06 16:21
soheadsome:好文 可以縮一下網址 01/06 17:28