O operador vírgula em c ++

Há um operador aparentemente inútil em C ++ conhecido como o operador de vírgula. Ele aparece como segue: expressão1, expression2-. Isto diz executar expressão1 e, em seguida, executar expressão2. O valor resultante e tipo da expressão global é o mesmo que o de expressão2.

Assim, você poderia dizer algo como o seguinte:

int i-int j-i = 1, j = 2-

Por que você nunca quer fazer uma coisa dessas? Resposta: Você não iria, exceto quando se escreve para rotações.

Os seguintes CommaOperator programa demonstra o operador vírgula em combate. Este programa calcula os produtos de pares de números. Se o operador entra N, as saídas do programa 1 * N, 2 * N-1, 3 * N-2, e assim por diante, todo o caminho até N * 1. (Este programa não faz nada particularmente útil.)

//// CommaOperator - demonstrar como o operador vírgula // é usado dentro de um para loop.//#include #incluir #incluir usando espaço de nomes std-int principal (int nNumberofArgs, char * pszArgs []) {// introduzir um alvo numberint nTarget-cout lt; lt; "Introduzir o valor máximo: "CIN II-III gt; gt; nTarget-para (int nLower = 1, = nUpper nTarget-nLower lt; = nTarget- nLower ++, nUpper -) {cout lt; lt; nLower lt; lt; " * "lt; lt; nUpper lt; lt; " é igual a "lt; lt; nLower * nUpper lt; lt; endl -} // espera até que o usuário está pronto antes de terminar o programa // para permitir que o usuário veja o resultscout programa lt; lt; "Pressione Enter para continuar ..." lt; lt; endl-cin.ignore (10, `n`) - cin.get () - 0-} retornar

O primeiro programa solicita que o operador para um valor-alvo, que é lido em nTarget. Em seguida, ele se move para o para ciclo. No entanto, desta vez não só quer incrementar uma variável de 1 a nTarget, você também quer diminuir uma segunda variável de nTarget para 1.

Aqui a cláusula de configuração do para laço declara uma variável nLower que inicializa a 1 e uma segunda variável nTarget que será inicializada para nTarget. O corpo do laço exibe nLower, nUpper, e o produto nLower * nTarget. o incremento incrementos de seção nLower e decréscimos nUpper.



A saída do programa aparece da seguinte forma:

Introduzir o valor máximo: 151 * 15 é igual a 152 * 14 é igual a 283 * 13 é igual a 394 * 12 é igual a 485 * 11 é igual a 556 * 10 é igual a 607 * 9 é igual a 638 * 8 é igual a 649 * 7 é igual a 6310 * 6 é igual a 6011 * 5 é igual a 5512 * 4 é igual a 4813 * 3 é igual a 3914 * 2 é igual a 2815 * 1 é igual a 15 Pressione Enter para continuar. . .

Neste exemplo de execução, 15 é o valor alvo. Você pode ver como nLower incrementa em linha recta de 1 a 15, enquanto nUpper faz o seu caminho de 15 para 1.

Na verdade, a saída desse programa é levemente interessante: Não importa o que você digita, o valor do produto aumenta rapidamente no início como nLower incrementos de 1. Rapidamente, no entanto, a curva se achata e assintoticamente aproxima-se do valor máximo no meio do intervalo antes de voltar para baixo. O valor máximo para o produto sempre ocorre quando nLower e nUpper são iguais.

você poderia ter feito o mais cedo para trabalho circuito sem usar o operador vírgula? Absolutamente. Você poderia ter tomado qualquer variável, nLower ou nUpper, Fora de para loop e tratá-los como variáveis ​​independentes. Considere o seguinte trecho de código:

nUpper = nTarget-para (int nLower = 1- nLower lt; = nTarget- nLower ++) {cout lt; lt; nLower lt; lt; " * "lt; lt; nUpper lt; lt; " é igual a "lt; lt; nLower * nUpper lt; lt; endl-nUpper ---}

Esta versão teria funcionado tão bem.

o para loop não pode fazer qualquer coisa que um enquanto loop não pode fazer. Na verdade, qualquer para loop pode ser convertido em um equivalente enquanto ciclo. No entanto, por causa de seu tamanho compacto, você vai ver o para laço muito mais vezes.


Publicações relacionadas