Что такое тип параметра void * & jude и что это использование?

StackOverflow https://stackoverflow.com/questions/4234690

Вопрос

Я смотрю через API, написанный на C ++, и я смешаюсь от того, что означает следующий тип параметра:

void*& data

Значит ли это, что пользователь будет проходить ссылку на пустоту указателя? Если это правда, каков смысл? Я имею в виду void * уже неерудно, так почему вы когда-нибудь захотите перенаправить его снова?

Это было полезно?

Решение

Трудно сказать, не видя его на использование, но вы указываете, что ссылка является уровнем косвествия. Вы найдете это странно, если это был указатель на указатель? Это довольно распространены - на самом деле вы имеете дело с ними при принятии аргументов командной строки и получаете указатели на указатели Char. Другим примером было бы, если бы вы делали карту HASH, используя ведра, и хотелось, чтобы иметь возможность вернуть указатель на указатель, который начал ведро.

Точка зрения в том, что иногда вам нужен несколько уровней косвенности. Это правда, что смешивание указателей и ссылки могут быть причудливыми, но есть веские причины для него. Одной из них является необходимость в C ++, чтобы взаимодействовать с C API. Множество системных вызовов POSIX требуют пустотных указателей, которые передаются, а затем изменяются, поэтому рассматриваемая функция C ++ может действовать в качестве оболочки вокруг этого.

Другие советы

void * означает Pass-Picker в C ++, что означает, что вы проходите у указателя, но это на самом деле копия указателя. Если вы изменили этот указатель в своей функции, как изменение своего адреса, он не отражен в указателе, который вы передали.

Объединение, что с проходом посредством ссылки, void *& Значит, вы проходите псевдоним оригинального указателя на эту функцию. Если вы изменили его, как изменение своего адреса, он будет отражен в исходном указателе.

Но будьте осторожны, чтобы не вернуть ссылку на местную пустоту *. Не делай что-то подобное:

void*& f()
{
 int* a=new int(10);
 void* x=(void*)a;
 return x;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top