使用する必要があるかどうかをどのように判断しますか
my_type bar;
using some_namespace::foo;
foo(bar);
それ以外の
some_namespace::foo(bar);
私の関数を呼び出すときfoo
(それは私の直接の範囲内にありません)?ADL を使用するかどうかを判断するための一般的な「ルール」はありますか? 「デフォルトで」どちらを使用する必要がありますか?
使用する必要があるかどうかをどのように判断しますか
my_type bar;
using some_namespace::foo;
foo(bar);
それ以外の
some_namespace::foo(bar);
私の関数を呼び出すときfoo
(それは私の直接の範囲内にありません)?ADL を使用するかどうかを判断するための一般的な「ルール」はありますか? 「デフォルトで」どちらを使用する必要がありますか?
それはADLではありません。どちらの例でも、foo
通常のルックアップで見つかります。ADL を使用した例は次のとおりです。
namespace ns {
class A { };
void f(A) { };
}
int main() {
f(A());
}
ここで、f
は通常のルックアップでは見つかりませんが、引数依存のルックアップで見つかります (ns
と並んで名前空間にあるためA
)。いかなる場合でも...
ADL は可能な限り避けてください。
ADL は、オペレーターの過負荷や交換可能なコンセプトなど、特定の特定のシナリオで役立ちます。ただし、他の多くの場合に奇妙で予期しない動作を引き起こすため、慎重に使用する必要があります。