(void*) casting - qu'est-ce utilisé?
Je l'ai fait essayer à la recherche de ce sur mais je pense dû à la syntaxe et ne sachant pas exactement quoi chercher, je suis devenu un peu décollées.
J'ai vu (void*) utilisé pour lancer, généralement à des appels de fonction. Qu'est-ce utilisé?
Pour ne pas presque autant que C. Nous avons de meilleures façons de faire plus de ce qu'il a été utilisé pour.
seriez-vous en mesure de préciser dans la réponse ci-dessous et donner un exemple de ce est utilisé pour, et pourquoi nous n'avons pas besoin de le faire en c++?
Nous l'utilisons pour l'interface avec du code C.
Voulez-vous dire
Je suis honnêtement pas dans un grand passif de l'état de la mémoire de venir avec des listes d'exemples aujourd'hui, mais
seriez-vous en mesure de préciser dans la réponse ci-dessous et donner un exemple de ce est utilisé pour, et pourquoi nous n'avons pas besoin de le faire en c++?
Nous l'utilisons pour l'interface avec du code C.
Voulez-vous dire
(void*)
?Je suis honnêtement pas dans un grand passif de l'état de la mémoire de venir avec des listes d'exemples aujourd'hui, mais
boost::variant
et boost::any
sont de bonnes solutions de rechange dans leurs domaines respectifs.OriginalL'auteur user997112 | 2013-05-31
Vous devez vous connecter pour publier un commentaire.
void*
, généralement considéré comme un pointeur void, est un pointeur générique type qui peut pointer vers un objet de type quelconque. Les pointeurs aux différents types d'objets sont à peu près la même dans la mémoire et donc vous pouvez utiliser void pointeurs pour éviter la vérification de type, ce qui serait utile lors de la rédaction de fonctions de gérer plusieurs types de données.Vide pointeurs sont de plus en plus utile en C qu'en C++. Normalement vous devriez éviter d'utiliser des pointeurs void et l'utilisation de la fonction de surcharge ou de modèles à la place. Type de vérification est une bonne chose!
peut-être en disant: "nul pointeur en C est essentiellement la même chose (dans le concept) comme RÉFÉRENCE d'Objet en Java" serait plus correct
OriginalL'auteur LukaCiko
Un vide pointeur est un pointeur vers une valeur dont le type et la taille sont inconnus. Je vais vous donner un exemple de la façon dont il pourrait être utilisé en C - bien que d'autres commentateurs sont corrects en affirmant qu'il est en grande partie et ne doit pas être utilisé (et, en fait, n'est pas nécessaire) en C++.
Supposons que vous avez une structure qui stocke une clé et une valeur. Il peut être défini comme ceci:
De sorte que vous pourriez utiliser cette structure pour correspondre à n'importe quelle chaîne de clé avec une valeur entière. Mais que faire si vous voulez stocker de l'arbitraire de la valeur? Vous voulez peut-être quelques clés pour correspondre avec des entiers, et quelques touches de faire correspondre avec des doubles? Vous devez définir votre structure dans une telle manière qu'il va suivre (avec un pointeur) une valeur de type arbitraire et de la taille. Le
void *
cadre du projet de loi dans ce cas:Maintenant, si votre valeur est un entier (int), vous pouvez le faire à sa valeur à l'aide
(int *) value
, ou si sa valeur est un double, vous pouvez le faire en utilisant(double *) value
. Cela suppose, naturellement, que le code à l'aide de la struct sait quel type il s'attend à voir dans quel contexte.En C++, bien que, cette même fonctionnalité est généralement pas atteint par l'utilisation de
void *
, mais en utilisant des choses comme des modèles ou d'une superclasse qui tous de vos différents types de descendre (comme Objet en Java, par exemple - une liste d'Objets peut stocker une Chaîne de caractères, des Entiers, etc.).OriginalL'auteur CmdrMoozy
C'est le plus générique de la façon de fournir un pointeur sur un objet en C/C++. Comme objet en C# ou en Java
OriginalL'auteur Wolfgang Ziegler
Qui est le plus souvent utilisé lorsque vous souhaitez transmettre un paramètre qui peut avoir différents états
Par exemple dans votre code générique, que vous devez passer le void* en tant que paramètre, puis dans le "Spécifique" de la mise en œuvre de ce code, vous aurait coulé le void* tout ce que vous voulez
Code générique abc.h
De Code Windows abc.Cpp
Le Code Linux abc.Cpp
OriginalL'auteur Oliver Ciappara