В описании std::is_void
говорится, что:
Предоставляет значение константы члена, равное true, если T является типом void, const void, volatile void или const volatile void.
Тогда что могло быть const void
, или volatile void
?
В этом ответе указано, что const void
тип возвращаемого значения будет недопустимым (однако компилируется на VC ++ 2015).
const void foo() { }
Если по стандарту const void
недействителен (ошибочен VC) - тогда что const void
?
void
безconst
».void
Ответы:
const void
это тип, на который можно сформировать указатель. Он похож на обычный указатель void, но преобразования работают по-другому. Например,const int*
нельзя неявно преобразовать в avoid*
, но можно неявно преобразовать вconst void*
. Точно так же, если у вас есть ,const void*
вы не можетеstatic_cast
его доint*
, но вы можетеstatic_cast
это к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
источник
const void
, но все вокруг пустые и непустые указатели [с (не) константностью].const void*
- единственная причина, по которой вы когда-либо виделиconst void
. Он может быть передан как аргумент шаблона, но этот тип аргумента может быть создан только с символом*
в конце.const void
на вопрос , задаваемый на языке адвокатаconst void
том, что все типы в C ++ могут быть сделаныconst
. Он «существует» так же, как иvoid
существует. Ответ @Benjamin Lindley объясняет, что это такое, когда вы его видите и как вы его используете.As
void
,const void
является пустым типом. Однако, еслиconst void
это возвращаемый тип,const
бессмысленно (хотя и разрешено!), Потому что [expr] / 6 :Однако это сам по себе допустимый тип и встречается, например, в функциях библиотеки C-стандарта , где он используется для обеспечения константной корректности указателей аргументов:
int const*
не может быть преобразован вvoid*
, ноvoid const*
.источник
const void
поскольку возвращаемый тип влияет на тип функции, поэтому это не совсем бессмысленно.Типы могут быть результатом шаблонов; шаблон может
const T
состоять и быть создан с помощьюT
asvoid
.Связанный ответ вводится в заблуждение или, скорее, ограничен ввиду того, что он касается особого случая нешаблонного типа, и даже в этом случае
const void
может быть бессмысленным , но это действительный код .источник