Форма поиска имени в C ++, которая позволяет находить имена функций в пространствах имен, связанных с аргументами, используемыми в вызове функции.
Неквалифицированный вызов функции, такой как func(a, b, c)
, будет искать имя func
в пространствах имен, связанных с типами аргументов a
, b
и c
. Например, если a
имеет тип ns::A
и существует функция ns::func
, то ее можно найти с помощью зависимого от аргумента поиска и добавить в набор перегрузки, используемый для разрешения вызова. [1118 ]
Причиной этой функции является возможность найти перегруженные операторы, объявленные в пространствах имен, поскольку операторы не могут быть квалифицированы по пространству имен, например
namespace ns { struct A { }; A operator+(const A&, const A&); } void f(ns::A a1, ns::A a2) { ns::A sum = a1 + a2; // must find ns::operator+ }
В приведенном выше примере оператор +
должен найти ns::operator+
, но без ADL он не будет.
ADL позволяет естественному синтаксису a1 + a2
работать должным образом, вместо того, чтобы писать что-то вроде a2 ns::+ a2
, который не является допустимым синтаксисом, или ns::operator+(a1, a2)
.
ADL иногда называют «Поиск Кенига» после Эндрю Кенига, который предложил эту функцию.