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