c++ - T型的结构范围是什么?

标签 c++ namespaces namespace-organisation

我在 wikipedia 上找到了它:

structural scope of T (which can be used to locate friend functions)

谁能解释一下这是什么? Google 帮不上什么忙。

最佳答案

因为它提到了友元查找,这种情况下的“结构范围”似乎是指类 T 的范围(当 T 是一个类时)或封闭的范围类(当 T 是在类中声明的成员类型时)。整个段落的措辞听起来很奇怪,因为 C++ 语言没有正式地将类类型称为“结构类型”,也没有正式定义“结构范围”。最重要的是,它似乎将类作用域称为“命名空间”,这是不正确的。

通过提到 friend ,它显然暗示了这样的情况

struct T {
  friend void foo(T) {}
};

int main() {
  T t;
  foo(t);
}

struct T {
  enum E { A };
  friend void foo(E) {}
};

int main() {
  T::E e = T::A;
  foo(e);
}

在这些情况下,在 main 中对 foo 的调用是可能解析的,因为 ADL 检查类 T 的范围并显式寻找 friend在那里发挥作用。如果没有 ADL,foo 将对 main 不可见。

关于c++ - T型的结构范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910045/

相关文章:

c++ - 在查找期间将外部命名空间拖入 std 命名空间

c++ - QGraphicsScene::addItem: 项目已经被添加到这个场景

c++ - 指向数组的指针未按预期工作

PHP:为当前框架中的第三方模块/插件命名空间

c++ - 函数定义先于命名空间中的声明

.net - 将我的类/接口(interface)安排/组织到文件夹中?不使用文件夹更改命名空间(Resharper : Namespace Provider = false)

c++ - 继承问题 : Using pointers with class instantiation not working as expected

c++ - 避免构造函数中 const 引用和 rvalue 引用的指数增长

language-agnostic - 命名空间/包/模块的历史?

php - DDD : Domain model namespaces convention