It just evaluates 1, 2 and 3 (since they are only values, but could as well be functions calls), and sets the value (or return value) of the last one to the left operand (in your example, a).
Maybe this will help you understand how it works:
#include
int toto()
{
printf("toto()\n");
return (21);
}
int tata()
{
printf("tata()\n");
return (42);
}
int main()
{
int a = (toto(), tata());
printf("%d\n", a);
return (0);
}
Output:
toto()
tata()
42
Edit:
Tha's C code, works the same in C++