Koenigルックアップの議論は悪い考えですか?
全くありません。演算子のオーバーロードのシナリオについて考えてみましょう。ADLは、異なる名前空間で定義された演算子を使用できるようにします。 ADLと
namespace foo
{
struct bar {};
bar operator+ (const bar& lhs, const bar&rhs);
}
、我々はADLなし
foo::bar b1, b2;
auto b3 = b1 + b2; // natural as operator
を書くことができ、我々は追記として
auto b3 = foo::operator+(b1, b2); // unnatural
を記述する必要があり、STLのすべてのオーバーロードされた演算子は、名前空間std
で定義されています。 ADLがなければ、われわれはそれを簡単に呼ぶことさえできる。
さらに、ADLを使用しないと、テンプレートの作成が難しくなります。
template <typename T>
T add(const T& lhs, const T& rhs) {
return What_Namespace::operator+(lhs, rhs); // how to deduce the name of namespace?
}
は、この重複していないです[ "なぜ、ADLは、発明されたの?"](/質問/ 4276772 /なぜ-た-引数依存ルックアップ・発明した?RQ = 1) –
@Rhymoid、そうでない場合は2番目の質問では、私は「はい」と言っていたでしょう。 – StoryTeller