193просмотров
2 февраля 2025 г.
statsScore: 212
Перегрузка операторов (часть 2) Ладно, вы еще не устали? Тогда вот вам на десерт самый абсурдный оператор. Оператор перечисления ,. Да, да, его можно перегрузить. Давайте для начала вспомним когда он может использоваться. Ну например в следующих строчках: int main() { int a = 0; int b = 0; for (a = 0, b = 0; a < 2 && b < 2; a++, b++); return a, b;
} Что тут делает этот оператор? Правильно, вычисляет по цепочке все выражения и возвращает самое правое. Давайте попробуем его перегрузить: struct Crazy { int a; int operator,(Crazy &ob2) { return a; }
}; int main() { Crazy a{1}; Crazy b{2}; return a, b;
} Результатом данной программы будет 1, то есть мы заставили вернуть левый объект вместо правого. Отлично, а нафига это нужно? Ну есть парочка интересных примеров (которые можно глянуть тут: https://stackoverflow.com/questions/5602112/when-to-overload-the-comma-operator). Вот один из них: Boost.assign умеет делать так: vector<int> v;
v += 1,2,3,4,5,6,7,8,9;
Перегрузив запятую позволяет создавать цепочки на добавление элементов в коллекцию. Ну что же, теперь вы знаете на 3 бессмысленных фичи С++ больше. Поздравляю вас, еще пару тысяч таких и мы с вами научимся проходить самые душные C++ интервью!