& quot; const * int & quot; или просто «int» в качестве аргументов функции. В чем разница?

void test(const int* pInt)

или же

void test(int pInt)

Я знаю, что первый пример делает ПИНТ своего рода защищенным. Но какое решение обеспечивает большую производительность? Так как оба (указатель const и обычный int) должны быть зарегистрированы в памяти.

-3

Решение

Технически, второй Можно быть быстрее, потому что первый подлежит псевдониму — нет никакого способа сказать, pInt не изменяется вне функции. Просто так pInt является const внутри метода это не означает, что исходная переменная, переданная в качестве аргумента, должна быть const — помните неconst в const преобразование неявное.

Обходной путь для этой проблемы будет использовать _restrict если поддерживается компилятором. Обратите внимание, что это неотъемлемая часть, а не часть языка.

В большинстве случаев они будут одинаковыми. Профиль профиль профиль. Напишите код для удобства чтения и выполняйте эти небольшие оптимизации только тогда, когда вы знаете, что они того стоят.

Это относится к int — если вы передаете большую структуру, передача по значению может стать узким местом, если исключение копирования не может быть применено к данному конкретному случаю. Таким образом, передача указателя будет быстрее, но я все равно буду использовать ссылку.

1

Другие решения

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

Считаете ли вы, что этот выбор вызывает компромисс производительности в вашем приложении? Что вы делаете в реализации своей функции, и почему вы думаете, что один может быть значительно быстрее другого?

1

оба примера pInt нельзя изменить внутри функции!

Тогда вы забыли const для второй функции. Поймите, что вы можете изменить значение pInt по своему желанию во второй функции, однако, так как все это было передано как значение, любые изменения не повлияют ни на что другое.

Разве ты не хочешь сделать это?

void test (const int pInt)

Если вы сделаете это, у вас будет const int для вашей функции (который был передан в качестве аргумента).

0