Страницы

Поиск по вопросам

вторник, 10 декабря 2019 г.

Когда стоит использовать в качестве параметров функции указатели, а когда переменные?

#cpp #указатели


Зависит ли это от количества переменных? От того какого они типа? Как использовать
указатели для прироста производительности?
    


Ответы

Ответ 1



Рекомендации из Google Style Guide. Рекомендации ниже основаны на стайлгайде от Google, но по факту они чуть жёстче, их чуть дополнил Yandex. Если вы передаёте переменную, размер которой не очень велик, например это стандартный тип, наподобие int, double, bool, и эта переменная подразумевается параметром функции (а не предназначена для изменения из функции) - передавайте её по значению. Если вы передаёте переменную, в которую будете сохранять часть ответа (или весь ответ), то передавайте её через указатель. Если вы передаёте переменную-класс, или просто тяжеловесную переменную, передавайте её по константной ссылке (чтобы избежать накладных расходов на копирование переменной). Если неизвестен тип передаваемой переменной-параметра (например это параметр шаблона), передавайте её по константной ссылке. Передачу параметров по неконстантной ссылке Google рекомендует не использовать вовсе.

Ответ 2



void foo(Type* ptr, /*...*/) Читая это обьявление, можно догадаться, что функция обрабатывает последовательность или функция учитывает возможность обрабатывать не только обьекты типа Type, но и обьекты его дочерных типов. Решение, передать в аргумент указатель, абсолютно не зависит от количества обьектов(старайтесь говорить об обьектах, а не о переменных). Зависит от типа, только если, как я выше указал, тип может иметь свои производные, и нам нужно рассматривать передачу в функцию обьектов таких типов тоже. Как использовать указатель для прироста производительности, по моему слышком общий вопрос: все зависит от кода и задачи, который он выполняет. Во всяком случаи, в рудиментарных кодах и в кодах обрабатывающие последовательность, деревья, связные списки и т.д. и т.п. без использования указателей не обойтись. В общем случаи, если вы хотите выразить: "мне нужен и этот и тот и вон тот тоже", это именно указатели, а если вы хотите выразить: "для игры, мне нужен ваш мяч, и его мяч и мой тоже", то вы работаете с конкретными обьектами...

Комментариев нет:

Отправить комментарий