私はウィキペディアでそれについて見つけました:
T の構造的スコープ (フレンド関数を見つけるために使用できます)
誰かがそれが何であるか説明してもらえますか? Google はあまり役に立ちませんでした。
私はウィキペディアでそれについて見つけました:
T の構造的スコープ (フレンド関数を見つけるために使用できます)
誰かがそれが何であるか説明してもらえますか? Google はあまり役に立ちませんでした。
フレンドルックアップに言及しているため、この場合の「構造スコープ」は、クラスのスコープ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 がなければ、 には見えません。main
T
foo
main