Страницы

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

пятница, 20 декабря 2019 г.

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

#cpp


Что означает использование нижнего подчеркивания в С++? Речь идет о его индивидуальном
использовании, а не в составе переменной и т.п. В частности, пример:

template 
class VDeleter {
public:
    VDeleter() : VDeleter([](T _) {}) {}
........................................


Заранее спасибо!
    


Ответы

Ответ 1



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

Ответ 2



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

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

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