В двух словах: анализ псевдонимов . Помните, что (например) const int &r
не объявляет r
ссылкой на неизменное целое число, но является ссылкой на целое число, которое не может быть использовано для его изменения. Таким образом, в любое время, когда запись в any int
может быть референтом r
, значение r
должно быть перезагружено, и устранение общего подвыражения и движение кода не может произойти. Если r
является локальным int
объектом , компилятор часто может доказать, что его адрес никогда не экранируется; тогда он может игнорировать любую запись во что-либо еще, часто позволяя r
оставаться в регистре или отбрасываться досрочно.
Это было указано в качестве отрывка в цитируемом вами отрывке, поскольку в данном случае это менее важно: Mat
должен содержать указатель на данные базового изображения, поэтому возможен некоторый псевдоним, даже если Mat
передается по значению. (Возможность доказать что-то о самом указателе может дать некоторую выгоду, но это должно быть сопоставлено с затратами на подсчет ссылок или тому подобное.)