Перво-наперво: Запятая на самом деле не оператор, для компилятора это просто токен, который получает значение в контексте с другими токенами.
Что это значит и зачем?
Пример 1:
Чтобы понять разницу между значением одного и того же токена в другом контексте, рассмотрим следующий пример:
class Example {
Foo<int, char*> ContentA;
}
Обычно новичок в C ++ думает, что это выражение может / могло бы сравнивать вещи, но оно абсолютно неверно, значение токенов <
, >
и ,
зависит от контекста использования.
Правильная интерпретация приведенного выше примера состоит в том, что он представляет собой шаблон.
Пример 2:
Когда мы пишем типичный цикл for с несколькими переменными инициализации и / или несколькими выражениями, которые должны выполняться после каждой итерации цикла, мы также используем запятую:
for(a=5,b=0;a<42;a++,b--)
...
Значение запятой зависит от контекста использования, здесь это контекст конструкции for
.
Что на самом деле означает запятая в контексте?
Чтобы еще больше усложнить (как всегда в C ++), оператор запятой может сам быть перегружен (спасибо Konrad Rudolph за указание на это).
Чтобы вернуться к вопросу, код
a = b, c;
означает для компилятора что-то вроде
(a = b), c;
, поскольку приоритет токена / оператора =
выше приоритета токена ,
.
и это интерпретируется в контексте как
a = b;
c;
(обратите внимание, что интерпретация зависит от контекста, здесь она не является ни вызовом функции / метода, ни созданием шаблона.)