La description de std::is_void
indique que:
Fournit la valeur de constante de membre égale à true, si T est du type void, const void, volatile void ou const volatile void.
Alors que pourrait être const void
, ou un volatile void
?
Cette réponse indique que le const void
type de retour serait invalide (cependant compile sur VC ++ 2015)
const void foo() { }
Si par norme, const void
est invalide (VC étant faux) - alors qu'est-ce que c'est const void
?
void
sansconst
".void
Réponses:
const void
est un type sur lequel vous pouvez former un pointeur. C'est similaire à un pointeur vide normal, mais les conversions fonctionnent différemment. Par exemple, aconst int*
ne peut pas être implicitement converti en avoid*
, mais il peut être implicitement converti en aconst void*
. De même, si vous avez un,const void*
vous ne pouvez passtatic_cast
le faire en unint*
, mais vous le pouvezstatic_cast
en unconst int*
.const int i = 10; void* vp = &i; // error const void* cvp = &i; // ok auto ip = static_cast<int*>(cvp); // error auto cip = static_cast<const int*>(cvp); // ok
la source
const void
, mais c'est des pointeurs vides et non vides [avec (non-) const-ness].const void*
est la seule raison pour laquelle vous verriez jamaisconst void
. Il peut être passé en tant qu'argument de modèle, mais ce type d'argument ne sera instancié qu'avec un*
à la fin.const void
en question posée par l'avocat de la langueconst void
est que tous les types en C ++ peuvent être créésconst
. Il "existe" de la même manière quivoid
existe. La réponse de @Benjamin Lindley explique ce que c'est quand vous le voyez et comment vous l'utilisez.As
void
,const void
est un type vide. Cependant, siconst void
est un type de retour , leconst
n'a pas de sens (bien que légal!), Car [expr] / 6 :Cependant, c'est un type valide lui-même et se produit par exemple dans les fonctions de bibliothèque C-standard , où il est utilisé pour assurer la const-exactitude des pointeurs d'argument:
int const*
ne peut pas être converti envoid*
, maisvoid const*
.la source
const void
comme un type de retour affecte le type de fonction, il n'est donc pas complètement dénué de sens.Les types peuvent être le résultat de modèles; un modèle peut indiquer l'état
const T
et être instancié avecT
asvoid
.La réponse liée est induite en erreur, ou plutôt limitée en ce qu'elle concerne le cas particulier d'un type non-modèle, et même dans ce cas
const void
pourrait être dénuée de sens , mais il s'agit d' un code valide .la source