0

使用する必要があるかどうかをどのように判断しますか

my_type bar;
using some_namespace::foo;
foo(bar);

それ以外の

some_namespace::foo(bar);

私の関数を呼び出すときfoo(それは私の直接の範囲内にありません)?ADL を使用するかどうかを判断するための一般的な「ルール」はありますか? 「デフォルトで」どちらを使用する必要がありますか?

4

1 に答える 1

1

それはADLではありません。どちらの例でも、foo通常のルックアップで見つかります。ADL を使用した例は次のとおりです。

namespace ns {
    class A { };
    void f(A) { };
}

int main() {
    f(A());
}

ここで、fは通常のルックアップでは見つかりませんが、引数依存のルックアップで見つかります (nsと並んで名前空間にあるためA)。いかなる場合でも...

ADL は可能な限り避けてください。

ADL は、オペレーターの過負荷や交換可能なコンセプトなど、特定の特定のシナリオで役立ちます。ただし、他の多くの場合に奇妙で予期しない動作を引き起こすため、慎重に使用する必要があります。

于 2012-02-12T05:43:26.387 に答える