Если код берет адрес переменной и передает ее в подпрограмму, компилятор не может знать, может ли этот адрес храниться где-то и использоваться долго после выхода из вызываемой подпрограммы и, возможно, после того, как переменная перестала существовать. Напротив, если проходы кода дают подпрограмме ссылку на переменную, у нее есть несколько больше уверенности в том, что ссылка будет использоваться только во время выполнения этой подпрограммы. Как только эта подпрограмма вернется, ссылка больше не будет использоваться.
В итоге все становится немного «сломанным» из-за того, что C ++ позволяет коду брать адрес ссылки. Эта возможность была предоставлена для обеспечения совместимости со старыми процедурами, которые ожидали указатели, а не ссылки. Если ссылка передается подпрограмме, которая берет свой адрес и сохраняет его где-то, все ставки отменяются. С другой стороны, если в соответствии с политикой кто-либо запрещает использовать адрес ссылки каким-либо образом, который может быть сохранен, можно получить уверенность, которую предоставляют ссылки.