Вы можете сделать это, но это немного сложно.
Моя главная проблема здесь, если ваш мотив. Я понимаю, что вы не хотите передавать большие объекты по значению, но не имеет значения, является ли объект большим или нет - вам действительно нужно знать, сколько времени понадобится конструктору копирования для создания параметра .
В качестве конкретного примера, размер std::vector
на самом деле очень мал, поскольку он выделяет всю память в куче и нуждается только в указателе. Однако копирование вектора занимает гораздо больше времени. Нечто подобное нельзя включить в условие.
Лучше всего здесь пройти мимо const &
, чтобы охватить наихудший случай. Кроме того, я не могу этого гарантировать, но я считаю, что компилятор был бы достаточно умен, чтобы передавать по значению, если бы считал, что это более эффективно.