4

私はウィキペディアでそれについて見つけました:

T の構造的スコープ (フレンド関数を見つけるために使用できます)

誰かがそれが何であるか説明してもらえますか? Google はあまり役に立ちませんでした。

4

1 に答える 1

6

フレンドルックアップに言及しているため、この場合の「構造スコープ」は、クラスのスコープT(がクラスの場合T) またはT外側のクラスのスコープ ( がクラス内で宣言されたメンバー型の場合) を参照しているように見えます。C++ 言語はクラス型を「構造型」として正式に参照せず、「構造スコープ」を正式に定義しないため、その段落全体の言い回しはかなり奇妙に聞こえます。その上、クラススコープを「名前空間」と呼んでいるようですが、これは正しくありません。

友達に言及することで、次のような状況を暗示しているようです

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);
}

これらの場合、ADL がクラスのスコープをチェックし、そこにあるフレンド関数を明示的に探すためfoo、inへの呼び出しを解決できます。ADL がなければ、 には見えません。mainTfoomain

于 2015-11-25T06:49:05.877 に答える