Указатель против ссылки - PullRequest
       43

Указатель против ссылки

247 голосов
/ 22 сентября 2008

Что было бы лучше, если дать функции исходную переменную для работы:

unsigned long x = 4;

void func1(unsigned long& val) {
     val = 5;            
}
func1(x);

или

void func2(unsigned long* val) {
     *val = 5;
}
func2(&x);

IOW: есть ли какая-то причина выбирать одно за другим?

Ответы [ 12 ]

2 голосов
/ 22 сентября 2008

Передайте по постоянной ссылке, если нет причины, по которой вы хотите изменить / сохранить содержимое, которое вы передаете.

В большинстве случаев это будет наиболее эффективный метод.

Удостоверьтесь, что вы используете const для каждого параметра, который вы не хотите изменять, поскольку это не только защищает вас от глупостей в функции, но и дает хорошее представление другим пользователям, что функция делает с переданными значениями. Это включает создание указателя const, когда вы хотите изменить только то, на что указывает ...

0 голосов
/ 26 апреля 2019

Ссылка похожа на указатель, за исключением того, что вам не нужно использовать префикс ∗ для доступа к значению, на которое ссылается ссылка. Кроме того, нельзя сделать ссылку на другой объект после его инициализации.

Ссылки особенно полезны для указания аргументов функции.

для получения дополнительной информации см. «Путешествие по C ++» Бьярна Страуструпа (2014). Страницы 11-12

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...