Страницы

Поиск по вопросам

четверг, 8 ноября 2018 г.

Нижнее подчеркивание ('_') в C++

Что означает использование нижнего подчеркивания в С++? Речь идет о его индивидуальном использовании, а не в составе переменной и т.п. В частности, пример:
template class VDeleter { public: VDeleter() : VDeleter([](T _) {}) {} ........................................
Заранее спасибо!


Ответ

Есть распространённая практика, не только в C++, давать название _ тем значениям или переменным, к которым не будут обращаться. Эдакое "неважно что", чему давать осмысленное имя нету (кхм) смысла.
Где-то это часть семантики языка, но в C++ это просто переменная со странным названием. Оптимизатор может догадаться выкинуть работу с этим значением, откуда возможно, пока это не влияет на наблюдаемое поведение. Но это никак не относится к названию, компилятор может это сделать с любой другой переменной.
То, что такое название не является "особым случаем" в семантике языка, накладывает несколько неприятных последствий:
невозможность объявить несколько таких в одной области видимости (в одном списке аргументов, например) нестрогость соблюдения (обратиться к такой переменной технически можно)
Почему этот аргумент вообще там должен быть — в каждом случае надо рассматривать отдельно, но случаи бывают.
Простой пример прямо в языке: в C++ чтобы перегрузить постинкремент (i++), нужно перегружать operator++(int). Но в оператор никакой int не передаётся. Зачем он? Чтобы отличить от преинкремента (++i), чья сигнатура operator++()
Вот этот самый "бессмысленный аргумент" и можно назвать _. Чтобы подчеркнуть его бессмысленность.
А в случае C++ (напоминает Harry), чаще можно убрать название вообще, что лишено вышеописанных недостатков.

Комментариев нет:

Отправить комментарий