funciones c++

#include <iostream>
Hola a todos, tengo una duda acerca de este pequeno código.
using namespace std;

int adiciona (int a, int b){
   a=a+b;
   cout << "adiciona:a= "<<a<< endl;
   return a;}

int main ( ) {
   int a=1;
   adiciona(a++,6);
   
    return 0;
}


Este codigo me arroja lo siguiente

adiciona:a= 7

No estoy entendiendo que pasa con el a++, yo pensaba esto hacia a=a+1, luego a =2 y asi adiciona sería 8, cual es el error en mi argumento? Muchas gracias por su ayuda
El problema es que no obtienes lo que deseas porque al poner a++, hace post incremento, es decir, cuando acaba la función incrementa.
Si hacer una prueba tal que así:
int adiciona (int a, int b){
cout<<a<<endl;
a=a+b;
cout << "adiciona:a= "<<a<< endl;
return a;}

Verás como si pones a++, a en el primer cout vale 1 y si pones ++a, en el primer cout vale 2.
Es bastante más recomendable poner a+1 si no necesitas incrementar a. Si tu intención es incrementar a, lo haces en la linea anterior y listo.

Kuein escribió:Verás como si pones a++, a en el primer cout vale 1 y si pones ++a, en el primer cout vale 2.

El estándar no te lo garantiza, además es una práctica muy propensa a confusiones y errores tipográficos.
Muchas gracias, ya me quedó clara cual esla diferencia. ;)
amchacon escribió:Es bastante más recomendable poner a+1 si no necesitas incrementar a. Si tu intención es incrementar a, lo haces en la linea anterior y listo.

Kuein escribió:Verás como si pones a++, a en el primer cout vale 1 y si pones ++a, en el primer cout vale 2.

El estándar no te lo garantiza, además es una práctica muy propensa a confusiones y errores tipográficos.

Habría que ver exactamente en los casos en los que falla. En este caso concreto no falla.
Aún así estoy totalmente de acuerdo, en muchos años programando, jamás he pasado por parámetro a++ (++a). Si quería aumentar la variable, post o pre método, pero en una línea diferente.
4 respuestas