Предположим, что у меня есть функция, которая принимает аргумент типа T
.
Он не мутирует его, поэтому у меня есть выбор передать его константой const T&
или значением T
:
void foo(T t){ ... }
void foo(const T& t){ ... }
Существует ли эмпирическое правило о том, насколько большой T
должен быть до того, как передача по ссылке const станет дешевле, чем передача по значению? Например, предположим, что sizeof(T) == 24
. Должен ли я использовать константу-ссылку или значение?
Я предполагаю, что конструктор копирования T
тривиален. В противном случае ответ на вопрос зависит от сложности конструктора копирования, конечно.
Я уже искал похожие вопросы и наткнулся на это:
шаблон проходит по значению или константной ссылке или...?
Однако принятый ответ ( qaru.site/info/171147/...) не содержит никаких подробностей, он просто указывает:
Если вы ожидаете, что T всегда будет числовым типом или типом, который очень дешево для копирования, тогда вы можете принять аргумент по значению.
Так что это не решает мой вопрос, а скорее перефразирует его: насколько мал должен быть тип "очень дешевым для копирования"?