Operator przecinkowy: ,Comma Operator: ,

Zezwala na grupowanie dwóch instrukcji, w których jest oczekiwany.Allows grouping two statements where one is expected.

SkładniaSyntax

expression , expression

UwagiRemarks

Operator przecinek ma łączność od lewej do prawej.The comma operator has left-to-right associativity. Dwa wyrażenia oddzielone przecinkami są szacowane od lewej do prawej.Two expressions separated by a comma are evaluated left to right. Lewy operand jest zawsze oceniany, a wszystkie efekty uboczne są kończone przed oceną prawego operandu.The left operand is always evaluated, and all side effects are completed before the right operand is evaluated.

Przecinki mogą być używane jako separatory w niektórych kontekstach, takich jak listy argumentów funkcji.Commas can be used as separators in some contexts, such as function argument lists. Nie należy mylić użycia przecinka jako separatora przy użyciu jako operatora; te dwa zastosowania są całkowicie różne.Do not confuse the use of the comma as a separator with its use as an operator; the two uses are completely different.

Rozważ wyrażenie e1, e2.Consider the expression e1, e2. Typ i wartość wyrażenia to typ i wartość E2; wynik oceny E1 jest odrzucany.The type and value of the expression are the type and value of e2; the result of evaluating e1 is discarded. Wynik jest l-wartością, jeśli prawy operand jest l-wartością.The result is an l-value if the right operand is an l-value.

Gdzie przecinek jest zwykle używany jako separator (na przykład w rzeczywistych argumentach funkcji lub agregacji inicjatorów), operator przecinki i jego operandy muszą być ujęte w nawiasy.Where the comma is normally used as a separator (for example in actual arguments to functions or aggregate initializers), the comma operator and its operands must be enclosed in parentheses. Na przykład:For example:

func_one( x, y + 2, z );
func_two( (x--, y + 2), z );

W wywołaniu funkcji func_one powyżej, trzy argumenty, oddzielone przecinkami, są przenoszone: x , y + 2 , i z .In the function call to func_one above, three arguments, separated by commas, are passed: x, y + 2, and z. W wywołaniu funkcji do func_two , nawiasy wymuszają, aby kompilator interpretował pierwszy przecinek jako operator oceny sekwencyjnej.In the function call to func_two, parentheses force the compiler to interpret the first comma as the sequential-evaluation operator. To wywołanie funkcji przekazuje dwa argumenty do func_two .This function call passes two arguments to func_two. Pierwszy argument jest wynikiem operacji sekwencyjnej oceny (x--, y + 2) , która ma wartość i typ wyrażenia y + 2 ; drugim argumentem jest z .The first argument is the result of the sequential-evaluation operation (x--, y + 2), which has the value and type of the expression y + 2; the second argument is z.

PrzykładExample

// cpp_comma_operator.cpp
#include <stdio.h>
int main () {
   int i = 10, b = 20, c= 30;
   i = b, c;
   printf("%i\n", i);

   i = (b, c);
   printf("%i\n", i);
}
20
30

Zobacz takżeSee also

Wyrażenia z operatorami dwuargumentowymiExpressions with Binary Operators
Wbudowane operatory, pierwszeństwo i kojarzenie języka C++C++ Built-in Operators, Precedence and Associativity
Operator oceny sekwencyjnejSequential-Evaluation Operator