2012-06-14 19 views
19

Por qué fue de C++ diseñada de tal manera que la forma correcta de declarar dos int * s en la misma línea es¿Por qué el puntero C++ * se asocia a la variable declarada, no al tipo?

int *x, *y; 

no

int* x,y; 

Sé que algunas personas piensan que debe evitar cualquier forma y declarar todas las variable en su propia línea, pero estoy interesado en por qué se tomó esta decisión de idioma.

+9

Porque esa es la manera en que se hace en C. – Fanael

+2

puede ser que sean más flexibles que un usuario puede declarar tanto un puntero como una variable normal al mismo tiempo. – Vijay

+5

Lea este http://www.research.att.com/~bs/bs_faq2.html#whitespace por la razón en C++, por razones C: http://cm.bell-labs.com/cm/cs/who /dmr/chist.html –

Respuesta

22

Para mantener la compatibilidad con el código C, porque así es como funciona C.

Bjarne hace un buen punto here:

La elección entre int* p;int *p; y no es lo correcto y lo incorrecto , sino de estilo y énfasis. C enfatizó expresiones; declaraciones a menudo se consideraban poco más que un mal necesario. C++, por otro lado, tiene un gran énfasis en los tipos.

Un programador C típico escribe int *p; y explica que *p is what is the int haciendo hincapié en la sintaxis, y puede apuntar a la C (y C++) gramática declaración para argumentar la corrección del estilo. De hecho, * se une al nombre p en la gramática.

A typical C++ programmer escribe int* p; y lo explica p is a pointer to an int haciendo hincapié en el tipo. De hecho, el tipo de p es int *. claramente prefiero ese énfasis y lo veo tan importante para el uso de las partes más avanzadas de C++ .

Por lo tanto, la motivación para este trabajo, ya que en C++ es cómo funciona en C.

La motivación funciona como la de C es que, como se ha dicho, C enfatiza expresiones en lugar de tipos.

+1

Entonces, ¿por qué C funciona de esta manera? :) – illEatYourPuppies

+4

@illEatYourPuppies ah, pero esa es una pregunta completamente diferente: P –

+0

La respuesta corta es arriba: "C enfatizó las expresiones, las declaraciones a menudo se consideraban poco más que un mal necesario". –

7

La respuesta simple es: porque así es como C lo hace. Lo cual, del curso , solo plantea la pregunta: ¿por qué C lo hace de esta manera?

La filosofía original, en principios de C, es que la declaración sea una imagen exacta del uso de . Así que cuando usted escribe:

int *p; 

, está declarando que la expresión *p tiene el tipo int (y el compilador resuelve el tipo real de p en consecuencia).

Esto, por supuesto, dejó de ser cierto el día C introdujo typedef, y después struct. Y cualquier semejanza desapareció por completo con const (introducido por primera vez en C++, entonces adaptar en C), donde las cosas como

int *const p; 

tienen ninguna relación con el uso. Pero para entonces, la suerte estaba echada.

1

respuesta

que viene de "C" ("c llanura", "puro c", lo que sea).

Cuando una variable puntero ya está declarada, la utilizaron como esto:

... 
*p = &x; 
*q = SomePointerFunc(); 
.... 

leí que los inventores originales de "c" querían programadores para declarar variables punteros con la misma sintaxis que se utilizan, con la estrella antes de que el identificador de la variable:

... 
int *p; 
int *q; 
... 

lo mismo ocurre con las matrices:

... 
x[5] = 'a'; 
y[77] = SomeItemFunc(); 
... 

... 
char x[5]; 
int y[100]; 
... 

Algunos maestros que tuve, insisten en declarar tipos de variables de & funciones de esta forma (estrella cerca de identificador):

... 
int *p; 
int *q; 
... 

En lugar de esto (estrella junto al tipo de identificador):

... 
int* p; 
int* q; 
... 

extra

En Java y otros lenguajes, como C#, la declaración de matrices o punteros están al lado de la ty pe, dejando la variable o función identificador solos, como este pseudocódigo:

*int p; 
*int q; 
char[5] x; 
int[100] y; 

prefiero esta técnica.

Saludos.

Cuestiones relacionadas