2011-08-01 22 views
7

Điều này có an toàn không?Có OK trả về một tham chiếu bằng chữ const không?

const int& f() 
{ 
return 1; 
} 

Những gì tôi đang cố gắng làm là để trả lại một số giá trị để const &

+2

Tại sao bạn muốn thực hiện việc này? –

+0

có thể trùng lặp của [Có hiệu quả hơn để trả về một tham chiếu const] (http://stackoverflow.com/questions/275795/is-it-more-efficient-to-return-a-const-reference) – iammilind

+0

bản sao có thể có của [C++ Vượt qua tham chiếu Const và trả về theo tham chiếu Const] (http://stackoverflow.com/questions/3216948/c-pass-by-const-reference-and-return-by-const-reference) – stijn

Trả lời

8

Không sao.
Trả về tham chiếu đến tạm thời không được chấp nhận vì truy cập nó bên ngoài hàm gây ra Hành vi không xác định.

+1

@mkaes: cái gì Steve Jessop nói. Lý do kỹ thuật là phần mở rộng suốt đời của một tham chiếu kết quả hàm, trong thực tế sẽ cực kỳ tốn kém. Việc triển khai sẽ phải hỗ trợ trả lại tham chiếu cho ví dụ: một biến tĩnh bên trong hàm, nhưng cũng phải đảm bảo rằng trong các trường hợp lưu trữ khác được phân bổ và lý tưởng deallocated sau khi tham chiếu biến mất, tốt nhất là theo cách minh bạch cho mã máy gọi. Tôi không nghĩ rằng đó là lý thuyết không thể. Nhưng nếu nó là kỹ thuật có thể, sau đó trong thực tế nó sẽ được * rất * tốn kém ... –

+0

@Steve: Đồng ý. Tôi nên đọc kỹ hơn. Đã xóa bình luận sai – mkaes

+0

Có phải '1' là tạm thời không? 'int x = 1; return x; 'sẽ trả về tạm thời, nhưng' return 1' thì khác, tôi nghĩ vậy. '1' sống ở đâu? Có lẽ tất cả các chữ sống là một không gian 'tĩnh' nơi chúng được an toàn mãi mãi. Ví dụ 'const char * foo() {return" Tôi có tạm thời không? "; } ' –

2

Không, bạn đang trở về một tham chiếu đến một biến tạm thời - đây là không an toàn. Biến tạm thời sẽ bị hủy khi trả về hàm.

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