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
在進入主題之前,先知道這些
1.unqualified lookup
沒有::,一層一層往外搜尋block
不過class處理內部的成員函數跟friend函數可以往後找
2.ADL
根據參數搜尋
3.qualified lookup
以::搜尋class或namespace或enum成員
::前面為空是global namespace