I'm not sure you can do something like that anyway. I have never tried it, only ever done int *foo; which is a pointer, but you declared a reference...
yes its possible. i like the third to because 1 makes it look more like a binary operator doing a calculation, 2 makes it look like foo is of type int& (well it technically is but i mean it looks like everything is of that type)
which for a while i was under the impression int* p1, p2, p3 meant all were pointers but that was because the guy who wrote the tutorial thought that to
The reference is part of the type. So it belongs with the type. The fact that you can't do int& foo, bar and have it work as you'd expect is an error in the language as far as I'm concerned. But that doesn't matter that much because you shouldn't declare things like that very often (or at all?) anyway.