Re: [問題] 看Stroustrup 的C++後有不懂的問題想請教
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章