Передача указателя по ссылке в C ++ - PullRequest
6 голосов
/ 10 февраля 2012

У меня есть функция, в которой я передаю итератор в буфер char * (который также является char *).Функция должна увеличивать итератор.Как бы то ни было, я обнаружил, что хорошим методом вставки итератора в функцию является передача указателя по ссылке:

bool myFunction(unsigned char * &iter)
{
   ...

Однако я слышал, что это плохая форма и может вызвать проблемы.Вот метод, который мой коллега предложил мне использовать:

typedef unsigned char * unsignedcharptr;
bool myFunction(unsignedcharptr &iter)
{
   ...

Мне кажется, что они оба делают одно и то же.Есть ли разница между этими двумя методами (я использую Visual Studio 2005)?Что правильно?

Ответы [ 2 ]

7 голосов
/ 10 февраля 2012

Я не думаю, что между ними есть какая-либо разница.Вы должны спросить своего коллегу, почему он так считает.

То, что может быть причиной, связано с ремонтопригодностью, где, если вы хотите переключиться с unsigned char * на char *, вам нужно будет поменять только одно место.Но это, я думаю, может привести к другим проблемам.

5 голосов
/ 10 февраля 2012

Есть ли разница в компиляторе между этими двумя методами (я использую Visual Studio 2005)?

Как правильно отметили другие, «нет».

Что правильно?

Между двумя альтернативами оно полностью сводитсяна дискуссию «Должен ли я прятать указатели за typedefs».Есть допустимые аргументы для любой позиции

Однако я думаю, что оба ваших фрагмента кода страдают чрезмерной специализацией.Я предпочитаю кодировать алгоритмы в качестве шаблонных функций, чтобы я не повторял себя .

Если ваш дизайн поддерживает его, вы можете обобщить свой код для принятия любого итератора :

template <class InputIterator>
bool myFunction(InputIterator &iter)
{
  std::cout << *iter;
  ++iter;
  return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...