看板 C_and_CPP 關於我們 聯絡資訊
在進入主題之前,先知道這些 1.unqualified lookup 沒有::,一層一層往外搜尋block 不過class處理內部的成員函數跟friend函數可以往後找 2.ADL 根據參數搜尋 3.qualified lookup 以::搜尋class或namespace或enum成員 ::前面為空是global namespace http://b.atch.se/posts/non-constant-constant-expressions/#friends 可以參考原作者的前一篇,裡面有提到規格書的7.3.1.2 我實際查過規格書後,有提到class內的friend宣告不能透過1跟3的方式找到 必須在目前的namespace加上格式與friend函數相符的宣告才能找到(符合ADL的話直接套 用即可) 規格書有提供一個範例說明在哪裡會找不到 但這個找不到的範例在你給的網頁是可以找到的,意思就是不合標準 補充: class T{ friend void f(); void g(){f();} }; 這樣是找不到f的,VC亦同 因為T不能用unqualified的方式找f class T{ friend void f(T*); void g(){f(this);} }; 這樣就找得到了,因為是ADL -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.56.181 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1489475447.A.B35.html ※ 編輯: loveflames (60.248.56.181), 03/16/2017 08:45:44