Atribuição Modificadora
Você pode abreviar a construção comum
como
Isso é conhecido como uma atribuição modificadora. Por exemplo,
mostra duas instruções equivalentes. A primeira usa atribuição simples; a segunda usa atribuição modificadora.
A atribuição modificadora funciona com qualquer operador aritmético binário. Por exemplo, você pode subtrair algo de um lvalue assim:
ou multiplicá-lo por uma certa quantia assim:
ou deslocá-lo por uma certa quantia assim:
Na maioria dos casos, esse recurso não adiciona mais poder à linguagem, mas fornece uma conveniência substancial. Além disso, quando o lvalue contém código que possui efeitos colaterais, a atribuição simples executa esses efeitos colaterais duas vezes, enquanto a atribuição modificadora os executa apenas uma vez. Por exemplo,
chama foo
duas vezes, e ele pode retornar valores diferentes a cada vez. Se foo ()
retornar 1 na primeira vez e 3 na segunda vez, o efeito pode ser somar x[3]
e 5 e armazenar o resultado em x[1]
, ou somar x[1]
e 5 e armazenar o resultado em x[3]
. Não sabemos qual dos dois ocorrerá, porque C não especifica qual chamada a foo
é computada primeiro.
Tal instrução não é bem definida e não deve ser usada.
Por outro lado,
é bem definida: chama foo
apenas uma vez para determinar qual elemento de x
ajustar, e ajusta esse elemento somando 5 a ele.
Atualizado