MXStat
MXStat
Введите текст для поиска
Расширенный поиск каналов
  • Вход на сайт
  • Каталог
    Каталог каналов Региональные подборки Поиск каналов
    Добавить канал
  • Рейтинги
    Рейтинг каналов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Max
C++ geek

31 Jul, 09:00

Открыть в Max Поделиться

Что такое ADL и как она может вас подставить

Argument-Dependent Lookup (ADL) — это фича, которая может как упростить код, так и привести к сюрпризам.

Представьте:

namespace math {
struct Vec {};

void print(const Vec&) {
std::cout << "Vec\n";
}
}

void foo() {
math::Vec v;
print(v); // компилятор найдёт math::print через ADL!
}

Хотя print не в текущем скоупе, компилятор ищет её в namespace аргумента v, т.е. math. Это и есть ADL.

Звучит удобно. Но...

⚠️ Опасность:

namespace lib {
struct Widget {};
void process(const Widget&) {
std::cout << "lib::process\n";
}
}

void process(int) {
std::cout << "global::process\n";
}

void bar() {
lib::Widget w;
process(w); // вызовет lib::process, а не global::process!
}

Такой вызов может внезапно потянуть неожиданные функции, особенно в generic-коде (например, в шаблонах), где ADL может найти «лишнее».

✅ Best practices:

* Не полагайся на ADL без крайней нужды.
* Используй ::qualified::names для ясности.
* В шаблонах — лучше явно передавать функции (через policy, traits, или параметры шаблона).

217 1
Каталог
Каталог каналов Подборки каналов Поиск каналов Добавить канал
Рейтинги
Рейтинг каналов Max
Контакты
Написать в Max Написать в Telegram Написать на почту
Всякая всячина
Пользовательское соглашение Политика конфиденциальности
Наши каналы
MXStat в Telegram MXStat в Max
Наши боты
MXAuthBot MXAnalyticsBot
Made by TGStat