85 votes

Qu'est-ce que le const void ?

La description de std::is_void déclare que :

Fournit la valeur constante membre qui est égale à true, si T est le type void, const void, volatile void, ou const volatile void.

Alors qu'est-ce qui pourrait être const void ou un volatile void ?

Cette réponse déclare que const void le type de retour serait invalide (mais compile sur VC++ 2015)

const void foo() { }

Si par standard, const void est invalide (VC étant erroné) - alors qu'est-ce qui est const void ?

88voto

Benjamin Lindley Points 51005

const void est un type sur lequel vous pouvez former un pointeur. C'est similaire à un pointeur normal de type void, mais les conversions fonctionnent différemment. Par exemple, un const int* ne peut pas être implicitement converti en un void* mais il peut être implicitement converti en un fichier const void* . De même, si vous avez un const void* vous ne pouvez pas static_cast à un int* mais vous pouvez static_cast à un const 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

22voto

Columbo Points 11661

Comme void , const void est un type vide. Cependant, si const void est un retourner type, le const n'a pas de sens (bien que ce soit légal !), car [expr]/6 :

Si une valeur prvalue a initialement le type " cv T ", où T est un type cv-unqualifié non-classe, non-réseau, le type de l'expression est ajustée à T avant toute autre analyse.

Cependant, il s'agit d'un type valide en soi, qui apparaît par exemple dans les documents suivants Fonctions de la bibliothèque standard C où il est utilisé pour assurer la correction de la constance des pointeurs d'arguments : int const* ne peut être converti en void* mais void const* .

18voto

DevSolar Points 18897

Les types peuvent être le résultat de modèles ; un modèle peut indiquer const T et être instancié avec T como void .

La réponse liée est erronée, ou plutôt, limitée dans sa vision, car elle concerne le cas particulier d'un type non-modèle, et même alors const void pourrait être inutile mais c'est code valide .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X