Die Beschreibung von std::is_void
besagt, dass:
Gibt den Wert der Elementkonstante an, der gleich true ist, wenn T vom Typ void, const void, volatile void oder const volatile void ist.
Was könnte dann sein const void
oder ein volatile void
?
Diese Antwort besagt, dass der const void
Rückgabetyp ungültig wäre (kompiliert jedoch unter VC ++ 2015).
const void foo() { }
Wenn standardmäßig const void
ungültig ist (VC ist falsch) - was ist es dann const void
?
void
ohneconst
" bezeichnen würde.void
Antworten:
const void
ist ein Typ, auf den Sie einen Zeiger bilden können. Es ähnelt einem normalen Void-Zeiger, aber die Konvertierungen funktionieren anders. Zum Beispielconst int*
kann a nicht implizit in a konvertiert werdenvoid*
, aber es kann implizit in a konvertiert werdenconst void*
. Ebenso, wenn Sie ein habenconst void*
, können Sie es nichtstatic_cast
zu einemint*
, aber Sie könnenstatic_cast
es zu einemconst int*
.quelle
const void
, aber es handelt sich um nichtige und nicht leere Zeiger [mit (Nicht-) Konstanz].const void*
ist der einzige Grund, den Sie jemals sehen würdenconst void
. Es kann als Vorlagenargument weitergegeben werden, aber dieser Argumenttyp wird immer nur mit einem*
am Ende instanziiert .const void
in Frage vom Sprachanwalt gestellt sehenconst void
ist, dass alle Typen in C ++ erstellt werden könnenconst
. Es "existiert" auf die gleiche Weise wie esvoid
existiert. Die Antwort von @Benjamin Lindley erklärt, was es ist, wenn Sie es sehen und wie Sie es verwenden.Wie
void
,const void
ist ein Hohlraumtyp. Wennconst void
es sich jedoch um einen Rückgabetyp handelt ,const
ist dies bedeutungslos (wenn auch legal!), Da [Ausdruck] / 6 :Es ist jedoch selbst ein gültiger Typ und tritt beispielsweise in C-Standard-Bibliotheksfunktionen auf , wo es verwendet wird, um die Konstanzkorrektheit von Argumentzeigern sicherzustellen:
int const*
kann nicht konvertiert werdenvoid*
, abervoid const*
.quelle
const void
Da ein Rückgabetyp den Funktionstyp beeinflusst, ist er nicht völlig bedeutungslos.Typen können das Ergebnis von Vorlagen sein. Eine Vorlage
const T
kann angeben und mitT
as instanziiert werdenvoid
.Die verknüpfte Antwort ist irreführend bzw. eingeschränkt, da sie den Sonderfall eines Nicht-Vorlagentyps betrifft und selbst dann
const void
möglicherweise bedeutungslos ist , aber es handelt sich um gültigen Code .quelle