Что такое const void?
описание std::is_void гласит:
предоставляет постоянное значение члена, равное true, если T -тип void, const void, volatile пустота, или const volatile void.
тогда что может быть const void или volatile void ?
в этом ответе говорится, что const void тип возврата будет недействительным (однако компилируется на VC++ 2015)
const void foo() { }
если по стандарту, const void is недопустимый (VC ошибается) - тогда что такое const void?
3 ответа:
const void- Это тип, на который можно сформировать указатель. Это похоже на обычный указатель void, но преобразования работают по-разному. Например,const int*не может быть неявно преобразован вvoid*, но он может быть неявно преобразован в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
как
void,const void- Это тип void. Однако, еслиconst voidэто возвращение тип,const- это бессмысленно (хотя и законно!), потому что [expr] / 6:если prvalue изначально имеет тип"cv
T", гдеTрезюме-неквалифицированный номера-класса, номера-тип массива, тип выражение настраивается наTперед любым дальнейшим анализом.однако, это сам допустимый тип и происходит, например,C-стандартные библиотечные функции, где он используется для обеспечения const-корректности указателей аргументов:
int const*не может быть преобразован вvoid*, аvoid const*.