Was ist const void?
Die Beschreibung von std::is_void
besagt, dass:
Stellt das Mitglied Konstanten Wert gleich true, wenn T die Typ void, const void, volatile
void, oder const volatile void.
Dann, was das sein könnte const void
oder eine volatile void
?
Diese Antwort besagt, dass const void
zurück geben, wäre unwirksam (jedoch kompiliert auf VC++ 2015)
const void foo() { }
Wenn durch standard const void
ungültig ist (VC, falsch) - was ist dann const void
?
- Die Antwort, die Sie link nicht, es wäre ungültig, heißt es, es wäre "sinnlos", was ich nehmen würde bedeuten ", bietet keine Vorteile gegenüber
void
ohneconst
". - die Antwort besagt, dass compiler sollten warnen/Fehler über eine solche Qualifikation. Ich nehme an C++ - standard nicht ermöglichen, Qualifikationen mit
void
- Die Antwort besagt, dass der compiler sollten warnen, dass über eine solche Qualifikation, die es nicht erwähnt, ein Fehler, und ein Fehler wäre falsch. Diese Bemerkung ist nur über die Qualität der Umsetzung, nicht um Konformität, aber ich kann verstehen, dass überhaupt nicht klar aus der Bemerkung selbst.
- der standard ist nicht angegeben, es sollte eine Warnung sein, wenn Sie verwenden sinnlosen code. Es war eine Entscheidung, die die gcc geben Sie einen zusätzlichen Hinweis, dass dieser code tut nichts. Aber VC ist nicht falsch, in keiner Weise.
- Die Antwort besagt, dass clang gibt eine Warnung aus, und das, in dem der Autor die Meinung, andere Compiler sollten. Wenn der standard hat es nicht zugelassen, es wäre ein Fehler, keine Warnung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
const void
ist eine Art, die Sie bilden können, sind ein Zeiger auf. Es ist ähnlich wie bei einem normalen void-Zeiger, aber Konvertierungen funktionieren anders. Zum Beispiel, einconst int*
nicht implizit konvertiert werden können, um einevoid*
, aber es kann implizit in einenconst void*
. Ebenso, wenn Sie eineconst void*
Sie nichtstatic_cast
es zu einerint*
, aber Sie könnenstatic_cast
es zu einerconst int*
.const void
, die sich aber nur um leere und nicht-leere Zeiger [ mit (nicht-)const-ness ].const void*
ist der einzige Grund, warum würden Sie jemals sehenconst void
. Es kann weitergegeben werden, um als template-argument, aber das argument Typ nur immer instanziert werden mit einer*
am Ende.const void
im Frage von Sprache der Rechtsanwaltconst void
ist, dass alle Typen in C++ gemacht werden kannconst
. Es "existiert" in der gleichen Weise, dassvoid
vorhanden ist. @Benjamin Lindley ' s Antwort erklärt, was es ist, wenn Sie es sehen und wie Sie es verwenden.Als
void
,const void
ist ein void-Typ sein. Allerdings, wennconst void
ist ein zurück geben, dieconst
sinnlos ist (wenn auch legal!!!), da [expr]/6:Jedoch, es ist eine gültige Art sich selbst und tritt in z.B. C-standard-library-Funktionen, wo es verwendet, um die const-correctness von argument-Zeiger:
int const*
können nicht konvertiert werden umvoid*
, abervoid const*
.const void
als Rückgabe-Typ wirkt sich auf die Funktion geben, so ist es nicht völlig bedeutungslos.Arten können die Folge von Vorlagen; Vorlage könnte Staates
const T
, und instanziiert werden mitT
alsvoid
.Den verlinkten Antwort in die Irre ist, oder eher, nur eingeschränkt in der Sicht, dass es im Hinblick auf den speziellen Fall einer nicht-template-Typ, und selbst dann
const void
könnte bedeutungslos, aber es ist gültigen code.