Phần 12.2.5 của tiêu chuẩn nói:đời tạm thời mở rộng
Một tạm thời bị ràng buộc vào một tham số tham chiếu trong một cuộc gọi chức năng (5.2.2) vẫn tồn tại cho đến khi hoàn thành sự biểu hiện đầy đủ chứa cuộc gọi . Một ràng buộc tạm thời với giá trị trả về trong một hàm trả về câu lệnh (6.6.3) vẫn tồn tại cho đến khi hàm thoát. Trong tất cả các trường hợp này, các thời gian được tạo trong quá trình đánh giá biểu thức khởi tạo tham chiếu, ngoại trừ tạm thời mà tham chiếu bị ràng buộc, bị hủy ở cuối biểu thức đầy đủ trong chúng được tạo và trong thứ tự đảo ngược của việc hoàn thành công trình xây dựng của họ.
Mã tôi cố gắng tìm hiểu là:
#include <iostream>
const int& foo(const int& fooRef)
{
return fooRef;
} // #0
int main (void)
{
const int& numberRef = foo(5); // #1
std::cout << numberRef; // #2
return 0;
}
On line #1
một đối tượng tạm thời được tạo ra và bị ràng buộc để fooRef
tham số của foo
. fooRef
bị hủy trên đường dây #0
. Vì vậy, tôi nghĩ tạm thời nên bị phá hủy ở đây vì phần mở rộng suốt đời không phải là chuyển tiếp.
Câu hỏi:
không
until the function exits
nghĩa là gì? Có nghĩa làuntill it finished executing
?Tại sao tôi nhận được kết quả
5
. Một đối tượng tạm thời vẫn tồn tại trên dòng#2
?Tôi làm cách nào để diễn giải báo giá chuẩn để tìm ra cách hoạt động của ví dụ này?
Từng bước đi qua nguyên tử với tham chiếu đến tiêu chuẩn sẽ được đánh giá cao. Cảm ơn bạn!
P. S. Câu trả lời được chấp nhận here cũng cho biết mã là broken
và tôi không nhận được, tại sao tôi nhận được kết quả như vậy của chương trình.