Я думаю, что компиляторы могут выполнять оптимизацию в случае временных объектов.Этот метод называется копией elision.
Пожалуйста, обратитесь к ответам на вопрос, который я опубликовал Что такое копия, elision-and-how-it-optimizes-copy-and-swap-idiom .Это действительно полезно Что такое копирование и как оно оптимизирует идиому копирования и обмена?
Хотя я не эксперт в этом, насколько я понимаю, компиляторы могут оптимизироватькопирование временного объекта в некоторых сценариях.
Например, если ваш код называется так
bar(getObject())
, где getObject
имеет подпись
Object getObject()
Этот вызовприведет к созданию временного типа Object
.Если компилятор не выполняет какую-либо оптимизацию, временное значение должно быть скопировано в аргумент bar
.
Однако, если компилятор поддерживает разрешение копирования, это копирование не будет выполнено, и временное будет передано в качестве аргумента bar
функция.Таким образом, копия избегается, и ее производительность такая же, как у foo
, которая принимает ссылку.Но, как я уже сказал, это происходит только в случае временного объекта