Operatore di valutazione sequenzialeSequential-Evaluation Operator

L'operatore valutazione-sequenziale, noto anche come "operatore virgola," restituisce i propri due operandi in sequenza, da sinistra verso destra.The sequential-evaluation operator, also called the "comma operator," evaluates its two operands sequentially from left to right.

SintassiSyntax

expression:expression:
assignment-expressionassignment-expression

expression , assignment-expressionexpression , assignment-expression

L'operando sinistro dell'operatore valutazione-sequenziale viene valutato come un'espressione void.The left operand of the sequential-evaluation operator is evaluated as a void expression. Il risultato dell'operazione avrà lo stesso valore e lo stesso tipo dell'operando destro.The result of the operation has the same value and type as the right operand. Ogni operando può essere di qualsiasi tipo.Each operand can be of any type. L'operatore valutazione-sequenziale non esegue le conversioni di tipi tra i propri operandi e non restituisce un l-value.The sequential-evaluation operator does not perform type conversions between its operands, and it does not yield an l-value. Esiste un punto di sequenza dopo il primo operando, che significa che tutti gli effetti collaterali derivanti dalla valutazione dell'operando sinistro vengono completati prima di iniziare la valutazione dell'operando destro.There is a sequence point after the first operand, which means all side effects from the evaluation of the left operand are completed before beginning evaluation of the right operand. Per altre informazioni, vedere Punti di sequenza.See Sequence Points for more information.

L'operatore valutazione-sequenziale viene in genere utilizzato per valutare due o più espressioni in contesti in cui sono consentite solo le espressioni.The sequential-evaluation operator is typically used to evaluate two or more expressions in contexts where only one expression is allowed.

In alcune situazioni è possibile utilizzare le virgole come separatori.Commas can be used as separators in some contexts. Tuttavia, è necessario fare attenzione a non confondere l'utilizzo della virgola come separatore con il relativo utilizzo come operatore, in quanto le due situazioni sono completamente differenti.However, you must be careful not to confuse the use of the comma as a separator with its use as an operator; the two uses are completely different.

EsempioExample

In questo esempio è illustrato l'operatore valutazione-sequenziale:This example illustrates the sequential-evaluation operator:

for ( i = j = 1; i + j < 20; i += i, j-- );  

In questo esempio ogni operando della terza espressione dell'istruzione for viene valutato in modo indipendente.In this example, each operand of the for statement's third expression is evaluated independently. L'operando sinistro i += i viene valutato per primo; quindi viene valutato l'operando destro j--.The left operand i += i is evaluated first; then the right operand, j--, is evaluated.

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

Nella chiamata di funzione a func_one, vengono passati tre argomenti, separati da virgole: x, y + 2 e z.In the function call to func_one, three arguments, separated by commas, are passed: x, y + 2, and z. Nella chiamata di funzione a func_two, le parentesi forzano il compilatore a interpretare la prima virgola come operatore di valutazione sequenziale.In the function call to func_two, parentheses force the compiler to interpret the first comma as the sequential-evaluation operator. Questa chiamata di funzione passa due argomenti a func_two.This function call passes two arguments to func_two. Il primo argomento è il risultato dell'operazione di valutazione sequenziale (x--, y + 2) che ha il valore e il tipo dell'espressione y + 2; il secondo argomento è 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.

Vedere ancheSee Also

Operatore virgola: ,Comma Operator: ,