Русская Википедия:Поиск, зависящий от аргументов
Поиск, зависящий от аргументов (Шаблон:Lang-en) или поиск Кёнига — формальный набор правил языка C++ для поиска неквалифицированных имён функций и операторов при их вызове, включая вызовы перегруженных функций и функций, определённых в различных пространствах имён[1]. Его появление связывают с именем американского программиста Эндрю КёнигаШаблон:Sfn.
Поиск, зависящий от аргументов, не применяется, если обычный поиск имени способен найти имя переменной, функции-члена, типа данных или имя объявления функции с областью видимости в виде программного блока. Его также запрещёно использовать, если имя вызываемой функции заключено в круглые скобки. В противоположность этому, если после имени функции следует список аргументов в круглых скобках, то поиск ADL осуществляется путём поиска имени в пространствах имён и классах, ассоциированных (связанных) с именами типов параметров вызываемой функции. Например, если тип данных параметра является указателем на класс X, то отыскивание имени будет вестись в пространстве имён класса X и во всех пространствах имён и классов, которым принадлежит ХШаблон:Sfn.
Определение множества связанных пространств имён и связанных классов для поиска ADL регламентируется следующими правиламиШаблон:Sfn:
- Для всех встроенных типов это — пустое множество.
- Для массивов и указателей — это пространства имён и классы лежащего в их основе типа. То есть, того типа данных, который является типом элемента массива или на который указывает указатель.
- Для перечисляемых типов enum связанным пространством имён является пространство имен, в котором объявлено перечисление.
- Для всех членов классов связанным классом является охватывающий их класс.
- Для всех типов классов (включая объединения) множеством связанных классов является сам тип класса, его охватывающий класс, а также все непосредственные или опосредованные базовые классы. Множество связанных пространств имён представляет собой пространства имён, в которых объявлены связанные классы. Если класс является экземпляром параметризованного класса (шаблона), то сюда включаются и типы аргументов типов шаблона, а также классы и пространства имен, в которых объявлены шаблонные аргументы шаблона.
- Для типов функций множества связанных пространств имён и классов включают пространства имен и классы, связанные со всеми типами параметров функций, а также связанные с типами возвращаемых значений.
- Для указателей на члены класса X множества связанных пространств имени классов включают пространства имён и классы, связанные с X в дополнение к связанным с типом члена класса (если это тип указателя на функцию-член, то учитываются также типы параметров и возвращаемых значений этой функции-члена).
Примечания
Источники
- ↑ Argument-dependent lookup Шаблон:Wayback cppreference.com