void
is nothing. Он не может быть создан. Это означает, что ссылка на void
бессмысленна, потому что ссылка, в отличие от указателя, ДОЛЖНА иметь (или иметь в случае ошибки программирования) какой-то экземпляр, к которому он относится.
A void *
является оставленным от C, где у вас нет проверки строгого типа и полиморфизма, чтобы помочь в предоставлении анонимных или произвольных данных для общей функции. По-прежнему необходимо вызывать функции C, чтобы они могли жить. Я рекомендую не использовать его в чистом коде C++ без уважительной причины.
Пример: Функция переменного тока с обратным вызовом
void myfunction(void * userp)
{
MyClass * ojb = (MyClass *) userp;
obj->doStuff();
}
void theirCFunction(void(*callbackfp)(void *), void * userp)
{
//Crom knows what happens in here, but sooner or later it
callbackfp(userp);
}
и это устанавливается с
MyClass mine;
theirCFunction(&myfunction, &mine);
В C-то ++ более, как это было бы предпочтительным
void theirFunction(GenericCallback * p)
{
//Crom knows what happens in here, but sooner or later it
p->doStuff();
}
и использования
MyClass mine;
theirFunction(&mine);
где MyClass
реализует реализует интерфейс, определенный GenericCallback
высоко родственный: http://stackoverflow.com/questions/1043034/what-does-void-mean-in-cc-and-c –
Я не» t видите «void» или «void *» в вашем примере «Like this». О чем ты говоришь? – AnT