et si oui, pourquoi certains en-têtes Win32 l'utilisent?
Par exemple: p> Un peu plus d'élaboration: si l'API n'utilise jamais de références (ni d'autres C ++ - construit uniquement) mais seulement les pointeurs et les valeurs, quel est le point d'avoir devrais-je traiter chaque endroit où je Voir Clarification supplémentaire: il apparaît que const code> vs. code> lpcvoid code>. P>
const LPVoid code> comme un endroit où le sens réel est
lpcvoid code>? (et donc il est sûr d'ajouter une fonte) P>
const LPVoid pBlock code> était en effet une erreur dans ce cas. Windows 2008 SDK le remplace à
LPCVoid code> dans
verquéryvalue code> Signature. Le vin l'a fait il y a un peu de temps. P> p>
4 Réponses :
Ces liens contiennent des informations qui facilitent la compréhension Typedef em> mieux: p>
http://www.velocityreviews.com /forums/t289888-need-Clarification-on-typedef -kedward.html
http://www.codeproject.com/kb/cpp/complex_declarations.aspx# Typedef P>
Un nom TypeDEF indique un type et non une séquence de jetons (comme une macro). Dans votre cas, c'est pas em> la même chose que la séquence de jeton syntaxiquement fort> a La déclaration de paramètre a le formulaire suivant (simplifié): p> Les spécificateurs de déclaration en cas de LPVoid code> désigne le type désigné également par la séquence de jeton
vide * code>. Donc, le diagramme ressemble à
const LPVoid code>, vous obtenez le diagramme suivant (les supports autour des spécificateurs signifie "le type désigné par le spécificateur"): p>
const Void * code> - parce que celui-ci ne désignerait pas un type de pointeur qualifié Cons, mais plutôt un pointeur sur un type qualifié de const (la chose pointue serait constituée). p>
const void * p code> sont
const void < / Code> - de sorte que le type de base de
* p code> est un code qualifié
annulé code>, mais le pointeur lui-même n'est pas qualifié. En cas de
const LPVoid P code> Cependant, les spécificateurs de déclaration spécifient un const qualifié
LPVoid code> - ce qui signifie que le type de pointeur est qualifié, ce qui rend la déclaration de paramètre identique à
vide * const p code>. p> p>
Attends, maintenant je suis confus. Const Void * et Void * const ne sont pas les mêmes.
@Efraïm, la boîte autour de void * code> signifie qu'il s'agit du type indiqué par
LPVoid code> - cela ne signifie pas que le texte apparaît dans la déclaration.
Ah, d'accord, ce diagramme m'a juste rendu confus.
Il est similaire à la fonction pointeur de la fonction. Bien que vous ne puissiez pas écrire void (*) () () p; code> vous pouvez effectivement écrire
typedef vide (* f) (); f p; code>. C'est
[void (*) ()] p; code> ici.
int Const et const int sont en fait deux choses différentes, une constante INT signifie qu'une fois la valeur qui est attribuée, vous ne pouvez pas la modifier et est constante en d'autres termes, l'adresse d'un const est fixe. ATTENDU QUE un const int est une valeur lisonnante et ne peut pas être modifiée. IIRC il y a une mention approfondie à ce sujet dans la programmation d'expert C de Pierre van der Linden.
@ Tommieb75: Cela ressemble beaucoup à celui de quelqu'un s'est mélangé avec des finales Java.
Édité le diagramme pour faire plus clairement la nature immatérielle de ces entités.
tommieb75: const int code> et
int const code> est 100% identique en C et C ++, juste comme
const int * code> et
int const * < / code>.
Je le vois comme ceci: un "nombre constant" est identique à une "constante de nombre", et un "pointeur à un nombre constant" est identique à un "pointeur à une constante de nombres", mais ce n'est pas la même chose qu'un "Pointeur constant à un nombre" ou un "pointeur constant à un nombre". (Les deux derniers sont les mêmes, cependant).
LPVoid est un pointeur de loin générique, qui est déjà long de la même manière que le pointeur générique normal (c'était différent des anciennes plates-formes 16 bits). P>
Ce qui est correct, cependant a peu à voir avec le sujet de la question.
void* const x = 0; x = 0; // this line will not compile - u cannot change x, only what it points to x->NonConstMethod(); // will compile const void* y = 0; y = 0; // this line will compile - u can change y, but not what it points to y->NonConstMethod(); // will not compile const void* const z = 0; // u cannot change z or what it points to // btw, the type of the 'this' pointer is "ClassName* const this;"
J'ai entendu dire qu'ils code> #define code> 'sont ces choses, donc il préférerait être
const void * code>. S'ils sont typées, ce serait
vide * const code> en effet.
@LitB: Malheureusement, ce sont des typées
@Efraïm, ah je vois. Majuscule maudite :)
Euh, il semble que tu as raison. Vous devriez l'ajouter comme une réponse.