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.

Original source

Related problems