O primeiro resultado que aparece é do learncpp, esse: http://www.learncpp.com/cpp-tutorial/814-anonymous-variables-and-objects/, no texto o autor fala:
Quando a expressão nX + nY é avaliado, o resultado é colocado em uma variável anónima e sem nome. Uma cópia da variável anónima é retornado para o chamador por valor.
Então é criado uma variável anônima? Como sou muito curioso resolvi por a prova.
Compilei as seguintes funções usando o compilador GCC 4.6.1 sem nenhum parâmetro de aumento de performace:
int add(int x, int y) { return x + y; } int add2(int x, int y) { int tmp = x + y; return tmp; }
Eis seus códigos em máquina:
// add(int x, int y) PUSH EBP MOV EBP,ESP MOV EAX,DWORD PTR SS:[EBP+0C] MOV EDX,DWORD PTR SS:[EBP+8] ADD EAX,EDX POP EBP RETN // add2(int x, int y) PUSH EBP MOV EBP,ESP SUB ESP,10 MOV EAX,DWORD PTR SS:[EBP+0C] MOV EDX,DWORD PTR SS:[EBP+8] ADD EAX,EDX MOV DWORD PTR SS:[EBP-4],EAX MOV EAX,DWORD PTR SS:[EBP-4] LEAVE RETN
Agora cadê a variável criada no add(int x, int y)? Se olharmos bem no registrador EAX é posto o valor y, no EDX é posto o valor x e por final é adicionado EDX ao EAX, só isso!
No add2(int x, int y) acontece o mesmo, mas só que no final há uma referência a nossa variável int tmp, após os cálculos a variável tmp vai pra pilha MOV DWORD PTR SS:[EBP-4, EAX e logo em seguida é colocada no registrador de retorno EAX.
Analizando meus dados acima é de fato que não existem variáveis anônimas
Att, Gilson Fabiano