Какие функции в стандартной библиотеке С++ не должны иметь префикс 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();
напрямую?