[問題] 請問兩個語法的問題

看板C_and_CPP作者時間15年前 (2010/09/20 20:25), 編輯推噓3(305)
留言8則, 4人參與, 最新討論串1/2 (看更多)
最近讀書遇到兩個語法上的問題: (一)if裡面出現逗號 ex1: if(assert(p!=NULL), p->foo != bar) //書名:Writing solid code 我自己測試的結果是,只要逗號後面的條件為true,整個if就認為是true,但 我實在無法理解為何要這樣寫? (二)::的使用 ex: HINSTANCE hComponent = ::LoadLibrary(name); ........................................... CREATEFUNCPTR CreateInstance = (CREATEFUNCPTR)::GetProcAddress(hComponent, "CreateInstance"); //書名: Inside COM ::的用法我知道的如下: 1. std::cout //cout隸屬在std這個namespace下 2. SomeClass::someMemberFunction //SomeMemberFunction隸屬在SomeClass之下 3. ::someGlobalVariable //在區域使用域內,存取相同名稱的全域變數 4. SomeClass::somePublicStaticVariable //在類別外存取public static variable 5. SomeBaseClass::someBaseClassFunction //衍生類別呼叫基本類別的成員函式 6. using SomeBaseClass::someBaseClassFunction //推翻C++對繼承而來的名稱的預設 遮掩行為(effective C++) 在ex裡的例子不符合以上我說的六個用法,::後面接的是函式非變數,所以我實在搞不懂 為什麼要加上::,希望有熱心版友解答一下,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.50.53.228

09/20 20:30, , 1F
1.只在意逗號後面的結果 2.::FUNCTION 呼叫全域函式
09/20 20:30, 1F

09/20 20:33, , 2F
第一個,逗號會從左做到右,最後指考慮最後一項
09/20 20:33, 2F

09/20 20:33, , 3F
用assert先檢查!=NULL 在debug的時候很方便,release又
09/20 20:33, 3F

09/20 20:33, , 4F
不會多去做這一步
09/20 20:33, 4F

09/20 20:33, , 5F
第二個,你好像沒考慮到 static function 要怎麼呼叫 XD
09/20 20:33, 5F

09/20 20:34, , 6F
喔不對 第二個應該只是轉型而已
09/20 20:34, 6F

09/20 20:36, , 7F
問題2: 基本上想法和你的3.很像 只是目標是函式而非變數罷了
09/20 20:36, 7F

09/20 20:53, , 8F
樓上都回答完了...逗號就是最右邊的那一項囉
09/20 20:53, 8F
※ 編輯: selection 來自: 125.227.132.215 (09/20 22:30)
文章代碼(AID): #1CbrAtoo (C_and_CPP)
文章代碼(AID): #1CbrAtoo (C_and_CPP)