Re: [問題] cannot appear in a constant-expression

看板C_and_CPP作者 (咕啾咕啾魔法陣)時間8年前 (2017/03/14 15:10), 8年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
在進入主題之前,先知道這些 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
文章代碼(AID): #1OnvTtir (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1OnvTtir (C_and_CPP)