【问题标题】:What is this so called lookup in namespace function definition?什么是命名空间函数定义中的所谓查找?
【发布时间】:2014-04-14 12:24:28
【问题描述】:

C++11 标准中的第 3.4.1/9 节说:

名称查找用于定义友元函数的名称 (11.3) 在授予友谊的类中定义的内联应继续 如成员函数定义中的查找所述。如果朋友 函数未在授予友谊的类中定义,名称查找 在友元函数定义中应按照以下描述进行 在命名空间成员函数定义中查找。

我对本段的解释是 在授予友谊的类中定义的朋友函数遵循上一段 (3.4.1/8) 中的规则。但是下一种情况呢,即朋友函数在授予友谊的类中没有定义?这是什么,所谓的命名空间函数定义中的查找?那会是第6段吗?我不确定。

【问题讨论】:

标签: c++ c++11 lookup language-lawyer


【解决方案1】:

是的,指的是 3.4.1§6。引用该段开头的一句话:

在函数的 declarator-id 后面的函数定义中使用的名称,它是命名空间N成员 ...

(强调我的)

【讨论】:

  • 你怎么能这么肯定?
  • @WakeupBrazil 因为友元函数中的名称不在任何class X的定义中?
  • 我终于确信这是第 6 段。谢谢 (+1)。
  • 那个 3.4.1p9 不是很清楚。这里有矛盾吗? void f(); struct A { friend void f() { X x; } typedef int X; }; struct B { friend void f(); };?应用于友元函数定义的查找是什么?它应该“按照在命名空间成员函数定义中查找的描述”还是“按照在成员函数定义中查找的描述”进行?
  • @JohannesSchaub-litb f() 在类A 中内联定义,因此它将遵循类A 的成员函数的查找规则。 f() 的其他声明(它们是 not 定义)不会影响这一点 - 为什么你认为它们应该?
猜你喜欢
  • 1970-01-01
  • 2012-09-26
  • 2011-11-12
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多