Why does c++ pointer * associate to the variable declared, not the type?
c++, declaration, language-design, pointers
Solution
To keep compatibility with C code, because that's how C works.
Bjarne makes a good point in his style and technique faq:
The choice between `int* p;` and `int *p;` is not about right and wrong, but about style and emphasis. C emphasized expressions; declarations were often considered little more than a necessary evil. C++, on the other hand, has a heavy emphasis on types.
A typical C programmer writes `int *p;` and explains it `*p is what is the int` emphasizing syntax, and may point to the C (and C++) declaration grammar to argue for the correctness of the style. Indeed, the * binds to the name p in the grammar.
A `typical C++ programmer` writes `int* p;` and explains it `p is a pointer to an int` emphasizing type. Indeed the type of p is int*. I clearly prefer that emphasis and see it as important for using the more advanced parts of C++ well.
So, the motivation for this working as this in C++ is how it works in C.
The motivation it works like that in C is that, as stated above, C emphasizes expressions rather than types.
Problem
Why was C++ designed such that the correct way to declare two int *s on the same line is ``` int *x, *y; ``` not ``` int* x,y; ``` I know some people think you should avoid either form and declare every variable on its own line, but I'm interested in why this language decision was made.