2015-01-08 57 views
8

Tôi đang tìm hiểu các tính năng mới của C++ 11 gần đây. Tuy nhiên, tôi không hoàn toàn hiểu một điều về giá trị.Giá trị được lưu trữ trong C++ ở đâu?

Hãy xem xét đoạn mã sau:

string getText() 
{ 
    return "Fabricati diem"; 
} 

string newText = getText(); 

Gọi để getText() tạo ra một r-giá trị được sao chép vào newText biến. Nhưng chính xác thì giá trị này được lưu trữ ở đâu? Và điều gì xảy ra với nó sau khi sao chép?

+1

Thực ra nó không được sao chép do [tối ưu hóa giá trị trả về] (http://en.wikipedia.org/wiki/Return_value_optimization) – CoryKramer

+7

@Cyber ​​Không thể di chuyển * và * RVO'd. Đó là một hoặc khác, rất có thể sau này. – juanchopanza

+0

Tốt bắt, bạn là chính xác. Tôi đã chỉnh sửa bình luận của mình. – CoryKramer

Trả lời

8

Gọi tới getText() tạo giá trị r được sao chép sang biến newText.

Nó có thể tạo tạm thời; nhưng đây là một tình huống trong đó copy elision được cho phép, vì vậy nhiều khả năng là newText được khởi tạo trực tiếp bởi hàm trả về, không có tạm thời.

Nhưng chính xác giá trị này được lưu trữ ở đâu?

Trình biên dịch lưu trữ tạm thời; tiêu chuẩn chỉ xác định tuổi thọ của nó. Thông thường, nó sẽ được xử lý như một biến tự động, được lưu trữ trong sổ đăng ký hoặc trong khung ngăn xếp của hàm.

Và điều gì sẽ xảy ra sau khi sao chép?

Vòng đời tạm thời kéo dài đến cuối biểu thức đầy đủ đã tạo ra nó (trừ khi nó được sử dụng để khởi tạo một referenece, trong trường hợp nó kéo dài miễn là tham chiếu đó). Vì vậy, ở đây, nó bị phá hủy ngay lập tức sau khi sử dụng nó để khởi tạo newText.

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