2016-05-30 30 views
6

Vì C++ cung cấp các tham chiếu đến các giá trị rvalues ​​tức là các tham chiếu rvalue được sử dụng chủ yếu để thực hiện các ngữ nghĩa di chuyển và các tác vụ hiệu quả bộ nhớ khác. Nhưng trong trường hợp tham chiếu sau đây là thay đổi giá trị của một chữ nhưng chúng ta biết rằng các chữ được đọc chỉ để làm thế nào một tham chiếu có thể thay đổi giá trị của một số biến chỉ đọc. Có một tham chiếu rvalue phân bổ bộ nhớ riêng của nó hoặc nó chỉ đơn giản là thay đổi giá trị của chữ?C++: bộ nhớ tham chiếu rvalue

#include <iostream> 
using namespace std; 

int main() 
{ 
    int a = 5; 
    int&& b = 3; 
    int& c = a; 
    b++; 
    c++; 
    cout << " Value for b " << b << " Value for c " << c << endl; 
} 

Thứ hai, khi một đối tượng tạm thời được chỉ định tham chiếu, tham chiếu sẽ làm việc với dữ liệu của đối tượng đó. Nhưng theo định nghĩa của các đối tượng tạm thời, chúng sẽ bị xóa khi biểu thức sử dụng chúng kết thúc. Làm cách nào để tham chiếu hoạt động như một tên bí danh cho đối tượng tạm thời đó nếu đối tượng tạm thời đó hết bộ nhớ?

Trả lời

12

Chữ số không thể bị ràng buộc với bất kỳ tham chiếu nào, không phải tham chiếu rvalue cũng như tham chiếu giá trị lvalue. Về mặt khái niệm, một chữ số tạo ra một đối tượng tạm thời được khởi tạo từ giá trị chữ và tạm thời này có thể được ràng buộc với một tham chiếu rvalue hoặc tham chiếu const lvalue (int const& r = 17;). Có vẻ như trích dẫn có liên quan về chữ là 5.1.1 [expr.prim.general] đoạn 1:

Một chữ là biểu thức chính. Kiểu của nó phụ thuộc vào dạng của nó (2.14). Một chuỗi chữ là một giá trị; tất cả các chữ khác đều là giá trị.

Khi ràng buộc tham chiếu trực tiếp đến tạm thời, thời gian sống của nó được mở rộng cho đến khi tham chiếu nằm ngoài phạm vi. Phần có liên quan cho vấn đề thời gian sống là 12.2 [class.temporary] đoạn 5:

Ngữ cảnh thứ hai là khi tham chiếu bị ràng buộc tạm thời. Tạm thời mà tham chiếu là ràng buộc hoặc tạm thời mà là đối tượng hoàn toàn của một subobject mà tham chiếu được ràng buộc kéo dài cho các đời của tham chiếu trừ:

  • Một tạm thời bị ràng buộc cho một thành viên tham chiếu trong một ctor-initializer của hàm tạo (12.6.2) vẫn tồn tại cho đến khi hàm khởi tạo khởi tạo.
  • Giới hạn tạm thời đối với tham số tham chiếu trong cuộc gọi hàm (5.2.2) vẫn tồn tại cho đến khi hoàn thành biểu thức đầy đủ chứa cuộc gọi.
  • Thời gian tồn tại của một giới hạn tạm thời với giá trị trả về trong câu lệnh trả về hàm (6.6.3) không được mở rộng; tạm thời bị hủy ở cuối biểu thức đầy đủ trong câu lệnh trả về.
  • Giới hạn tạm thời đối với tham chiếu trong trình khởi tạo mới (5.3.4) vẫn tồn tại cho đến khi hoàn thành biểu thức đầy đủ chứa trình khởi tạo mới.
+0

Hey từ đó tham khảo để bạn biết những con số phần như '(5.1.1) đoạn 1' –

+1

@HarshulSharma: Tôi đang trích dẫn tiêu chuẩn C++ đưa ra tại thời điểm bưu điện. Trong trường hợp bài viết trên là ISO/IEC 14882: 2014. Các tài liệu này có thể được mua từ các tổ chức tiêu chuẩn hóa quốc gia. Một số _drafts_ có sẵn (xem trang [open std] (http://www.open-std.org/JTC1/SC22/WG21/) cho một số liên kết). Tham chiếu của tôi thường bao gồm cả số phần và tham chiếu _stable như "[expr.prim.general]": số phần, từ ngữ chính xác và số đoạn có thể thay đổi nhưng vẫn giữ nguyên tham chiếu ổn định. Văn bản được trích dẫn sử dụng tham chiếu như trong văn bản được trích dẫn. –

+0

Cảm ơn tôi không biết rằng WG21 cũng xuất bản bản thảo cuối cùng. Tôi chỉ nghĩ rằng họ chỉ phát hành các bản nháp khác nhau cho các khái niệm khác nhau. Bây giờ tôi nghĩ rằng tôi có một tài liệu tham khảo đáng tin cậy.Cảm ơn rất nhiều :) :) –

Các vấn đề liên quan