«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я могу передавать значения R по константной ссылке в C++?

Почему я могу передавать значения R по константной ссылке в C++?

Опубликовано 21 декабря 2024 г.
Просматривать:619

 Why Can I Pass Rvalues by Const Reference in C  ?

Сохранение значений 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