作者loveflames (咕啾咕啾魔法阵)
看板C_and_CPP
标题Re: [问题] cannot appear in a constant-expression
时间Tue Mar 14 15:10:43 2017
在进入主题之前,先知道这些
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1489475447.A.B35.html
※ 编辑: loveflames (60.248.56.181), 03/16/2017 08:45:44