下面定义全局命名空间中的友元函数,声明与朋友相同的函数
class Cls {
friend void func(int) { }
friend void ::func(int);
};
Run Code Online (Sandbox Code Playgroud)
so.cpp:3:17: error: ‘void func(int)’ has not been declared within ‘::’
friend void ::func(int);
^~
so.cpp:2:17: note: only here as a ‘friend’
friend void func(int) { }
^~~~
Run Code Online (Sandbox Code Playgroud)
这对我来说应该没问题,它在全局命名空间中定义一个函数不是吗?gcc错误很明显,不喜欢它only是朋友.谁是对的?
友元声明本身不会使名称对非限定查找或限定查找可见.
声明:
friend void func(int) { }
Run Code Online (Sandbox Code Playgroud)
确实func在全局命名空间中声明了名称.但是,无法通过不合格或合格的查找找到该名称.它只能通过ADL找到(因为论证的 Casey int意思是,所有都无法找到它是钢铁般的导弹人).
普通查找的唯一方法func就是在类体之外另外提供一个声明.
gcc拒绝是正确的.
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |