Если вы беспокоитесь о значении и цели const &
против &
в списках параметров функции, я боюсь, что вы лаете не на то дерево, поскольку оно имеет мало общего с временными объектами.
void method( Object x );
Это копирует-конструирует Object
из фактического аргумента. Любые изменения, сделанные в x
внутри функции, теряются, когда функция завершается, аргумент функции не изменяется.
Но вы не хотите оплачивать стоимость копирования.
void method( Object & x );
Это не копирование-конструирование Object
из фактического аргумента, но x ссылается на аргумент, т.е. любые изменения, сделанные в x
внутри функции, действительно сделано для самого аргумента.
Но вы не хотите, чтобы вызывающие методы задавались вопросом о том, что может произойти с их аргументами.
void method( const Object & x );
Это не копирование-конструирование Object
из фактического аргумента, и x
нельзя изменить внутри функции .
Вы не платите за конструктор копирования, и вы даете понять вызывающей стороне, что его аргумент не будет подделан.
Вы не можете передать временный объект в качестве аргумента во второй вариант (см. Ответ Унаперссона), потому что не будет изменяемого объекта, на который можно сослаться, но поскольку эта функция громко объявляет, что он будет изменять аргумент (так как он объявлен как неконстантная ссылка), передача временного аргумента в любом случае бессмысленна.