Дешевый проход по значению против прохода по постоянной ссылке - PullRequest
0 голосов
/ 11 апреля 2020

В частности, что касается MSV C на VS 2019, как выглядит const & на дешевых объектах с максимальной оптимизацией? Можно ли с уверенностью сказать, что всегда, по крайней мере, не вредно делать что-то с помощью const &?

void foo( char );
void foo( const char & );

Я знаю, что его реализация определяется тем, является ли ссылка указателем, но я просто хочу знать конкретно для реализации MSV C, действительно ли плохо иметь const & везде.

Если это так, я должен специализировать интенсивно используемые шаблонные функции для передачи по значению вместо ссылки на примитивы с размером < PTR?

1 Ответ

2 голосов
/ 11 апреля 2020

Если это так, я должен специализировать часто используемые шаблонные функции для передачи по значению вместо ссылки для примитивов с размером

В общем, нет. В шаблонных функциях почти всегда все их определения видны при вызове, что означает, что если ваш оптимизирующий компилятор (из которых MSV C очень хороший) видит возможность, он не будет сорван тем, какой путь вы выбрали.

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

99,5% времени Вам не стоит об этом беспокоиться. Если вы хотите тратить время на производительность, потратьте его на профилирование.

...