Re: [問題] 看Stroustrup 的C++後有不懂的問題想請教

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/03/17 12:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《allstarschh (allstars)》之銘言: : 我看的是Stroustrup的the C++ Programming lang : 然後有幾個問題想請教 : 1.在Chap3 3.11 Advice p.66 裡 第七條 : Using string rather than char* : 請問即使我對char * 用了簡單的strcat strcpy這些library : 會比string 還要來的慢嗎??? : 或者是可以說明在處理字串時(就ascii就好了) : 什麼時候用string,when to use char*呢? 不是速度問題, 而是安全簡單的原因. 用 char* 你要記得是自己 allocate 還是單 純指向, 要知道 allocate 了多少位置, 不夠 位置又要自己 re-allocate etc, 這些都是 error-prone 的東西. 什麼時候用什麼.... 我會答, 沒有什麼特別 原因, 字串就用 std::string 吧. char* 就留在真 的需要的時候才用 (到那個時候你就會知道 string 不合用了) : 2.在10.2.8 Structurs and Classes的最後 p.235 : 他講了一句 : allowing many access sepcifiers in a class is useful for : machine generated code. : 就是他上面有講個例子 public,private可以一直加的 : class Data4 { : public : : ... : private : : ... : public: : ... : } : 這裡的machine generated code是指什麼? : 是某些tool產生出的c++ code還是compile完產生的code : (IR, assembly, or machine code) : 為什麼會useful?? 意思是, 比如我從 CORBA 的 IDL 或 Webservice 的 WSDL 之類, 經由一個 tool 建立一個對應的 C++ source file, 當中可能每個 method 都要建立一些對應的 private helper method. 那麼我的 tools 可以這樣做: while(idl.hasMoreMethod()) { methodName = idl.getMethod(); outputSource.print("public:"); outputSource.print("void " + methodName + "();"; outputSource.print("private:"); outputSource.print("void " + methodName + "Helper();"; } 這樣我 generate 出來的 source 就會有很多部份的 public:/private: C++ 容許這樣的寫法, 就讓我的 generation 過程變簡單了, 不然我就得 把所有 public method 先存著, 然後到讀完 input file 才一次寫入, 就 比較麻煩了 : 3. 在10.4.6.2 Member Constants p249 : 他說可以initialize a static integral constant member : 為什麼只有int 可以 float那些為什麼不行呢??? 書不在手邊 :P 不知前文後理了 : 4.在11.2.3 p265 : 第一段要結束時他說 : it is not possible to define an operator function that : operates exclusively on pointers : 這是指什麼意思呢 : 感謝 即是不可能做 int operator +(Foo* rhs, Bar* lhs); Foo* foo; Bar* bar; int result = foo + bar; 這樣的事. 道理上就等如不允許你定義一個operator 只有 int 一樣. 如果寫了 int operator +(int rhs, int rhs); 可想是多大的災難 alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82
文章代碼(AID): #19lomdMf (C_and_CPP)
文章代碼(AID): #19lomdMf (C_and_CPP)