Сохранение значений R с помощью константных ссылок: головоломка C
В C передача значений rvalue (временных объектов) по константной ссылке разрешена, в отличие от обычных ссылок . Рассмотрим следующую программу:
void display(const int& a) { cout Программа позволяет передавать в функцию отображения как lvalue, так и rvalue, даже если ссылка помечена как const. Такое поведение вызывает недоумение, поскольку константные ссылки обычно связаны с сохранением lvalue.
Продление срока службы константной ссылки
Ключ к пониманию этого поведения лежит в семантике константных ссылок в C . Константная ссылка продлевает время существования указанного объекта до конца содержащей его области. В случае rvalue это эффективно предотвращает уничтожение временного объекта до тех пор, пока ссылка const не выйдет за пределы области действия.
Пример: продление срока службы Rvalue
В нашем случае Например, при вызове display(5) происходит следующее:
- Значение rvalue типа int создается со значением 5.
- Константная ссылка a привязана к этому rvalue.
- Константная ссылка продлевает время жизни rvalue до конца функции отображения.
- The rvalue используется внутри функции для печати значения 5.
- Когда функция отображения возвращает значение, ссылка const выходит за пределы области видимости, и значение rvalue, наконец, уничтожено.
Это демонстрирует, как константная ссылка может продолжать указывать на значение r, позволяя ему оставаться в существовании, даже если в противном случае оно было бы немедленно уничтожено.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3