У меня есть метод с параметром, доступным только для чтения.
template <typename T>
void foo(const T t) {...}
Преимущество этого определения в том, что foo(2)
синтаксически корректен.Однако у него есть и обратная сторона: применение foo
к большому объекту заставляет его копировать объект.Поскольку я только читаю из аргумента, это просто трата времени и памяти.
Стандартное решение - сделать параметр t
константной ссылкой.Однако у этого есть и недостаток: foo(2)
больше не является синтаксически правильным.Я должен был бы сделать int i = 2; foo(i);
, что я считаю неудачным.
Есть ли способ получить лучшее из обоих миров?Так что foo(2)
является синтаксически правильным и применение foo
к объекту заставляет его проходить по ссылке?
РЕДАКТИРОВАТЬ: Очевидно, что константная ссылка уже является лучшей из обоих миров.Теперь я хотел бы знать, почему это так.Почему foo(2)
синтаксически правильный?Как 2
может стать здесь ссылкой?