Какие функции в стандартной библиотеке С++ не должны иметь префикс std:: при использовании?

Когда я программирую на C++, вместо того, чтобы писатьusing namespace std;, я обычно использую префиксные компоненты, такие какstd::cout,std::cinи т.д. Но потом я наткнулся на ADL и почему вы должны использовать using std::swap;.

Многие компоненты стандартной библиотеки (внутри std) вызывают swap неквалифицированным образом, чтобы разрешить вызов пользовательских перегрузок для неосновных типов вместо этой универсальной версии: Пользовательские перегрузки swap объявлены в том же пространстве имен, что и тип, для которого они предназначены. при условии, что выбрано через поиск, зависящий от аргумента, по этой универсальной версии.

Но во всех источниках про ADL упоминают только . Существуют ли какие-либо другие функции, подобные этой, которых я должен остерегаться при использовании? Или для всех других функций я должен использовать полное имя? Или я должен использовать неквалифицированное имя для каждой функции вstd::?

РЕДАКТИРОВАТЬ: (я не совсем ясно сформулировал свой первоначальный вопрос. Вот что я именно имел в виду, когда писал вопрос.)

Есть ли какая-либо другая функция в стандартных библиотеках С++, которая является популярным кандидатом для настройки на основе ADL, очень похожей наstd::swap, поэтому, когда я использую их, я должен быть осторожен в использованииusing std::foo; foo();форму вместо вызоваstd::foo();напрямую?

0 ответов

Другие вопросы по тегам