Одним из практических применений является эффективное использование его с переменными аргументами в макросе. Кстати, переменные аргументы ранее были расширением в GCC, а теперь являются частью стандарта C ++ 11.
Предположим, у нас есть class X
, который добавляет объект типа A
в него. т.е.
class X {
public: X& operator+= (const A&);
};
Что, если мы хотим добавить 1 или более объектов A
в X buffer;
?
Например,
#define ADD(buffer, ...) buffer += __VA_ARGS__
Выше макроса, если используется как:
ADD(buffer, objA1, objA2, objA3);
тогда он расширится до:
buffer += objA1, objeA2, objA3;
Следовательно, это будет прекрасный пример использования оператора запятой, поскольку переменные аргументы расширяются с тем же.
Таким образом, чтобы решить эту проблему, мы перегрузим comma
оператор и обернем его вокруг +=
, как показано ниже
X& X::operator, (const A& a) { // declared inside `class X`
*this += a; // calls `operator+=`
}