2013-09-21 3 views
-5
int* p1, p2; 

Selon la norme du C, p1 est un pointeur encore p2 n'est pas.Pourquoi p2 n'est pas un type de pointeur dans la déclaration int * p1, p2 ;?

Je me demande simplement pourquoi la norme C++ ne définit pas aussi p2 comme un pointeur?

Je pense qu'il est raisonnable de le faire. Parce que:

C++ est un langage de typage fort. C'est-à-dire, étant donné tout type T, l'instruction T t1, t2; garantit toujours t1 et t2 ont le même type.

Cependant, le fait que p1 et p2 n'aient pas le même type rompt la règle, et semble contre-intuitif. Donc, ma question est la suivante: quelle est la raison d'adopter une telle règle contre-intuitive telle quelle? Juste pour la rétrocompatibilité?

+1

Quelle est toute cette absurdité à propos du "typage fort" et de la "rétrocompatibilité"? Quel est le problème avec la possibilité de définir, par exemple, un int et un pointeur sur un int sur la même ligne? – paulsm4

+0

"un int et un pointeur vers un int sur la même ligne" doivent être considérés comme mauvais style. Je pense. – xmllmx

+1

@xmllmx Votre façon d'écrire le qualificateur de pointeur adhérant au nom du type au lieu de l'identifiant est plutôt le mauvais style. 'int * p' est préféré à' int * p' pour cette raison exacte (le '*' qualifie le nom, pas le type). –

Répondre

2

La réponse simple qui ne vous aidera pas beaucoup est que cela est fait pour la compatibilité descendante avec C, qui a exactement la même syntaxe pour définir les variables. La justification de cette conception devrait provenir des créateurs de C, et je ne le sais pas vraiment. Ce que je sais, c'est que la plupart des directives de codage que j'ai utilisées dans différentes entreprises interdisaient la définition de plusieurs variables dans la même déclaration, et une fois que vous évitez cela, tout devient simple à lire. La syntaxe des déclarations en C et C++ n'est pas vraiment l'une de leurs forces, mais c'est ce qu'elle est.

2

int est le type de base, * ou & sont des spécificateurs de préfixe qui sont également appelés opérateurs de déclarateur. Cela signifie que * fonctionne sur la variable après elle. Et ce n'est pas un modificateur pour int. Je pense que c'est pourquoi.

Questions connexes