Có thể tạo ra (và vượt qua) một con trỏ đến một đối tượng tạm thời, giả định rằng bạn biết những gì bạn đang làm. Tuy nhiên, nó nên được thực hiện khác nhau.
Một hàm có giá trị trả lại của loại không tham chiếu trả lại một rvalue. Trong C++, việc áp dụng toán tử unary &
tích hợp vào một giá trị bị cấm. Nó đòi hỏi một lvalue.
Điều này có nghĩa, nếu bạn muốn lấy con trỏ đến đối tượng tạm thời của mình, bạn phải thực hiện theo cách khác. Ví dụ, như một hai dòng chuỗi
const string &r = f1(str);
f2(&r);
mà cũng có thể được xếp vào một dòng duy nhất bằng cách sử dụng một dàn diễn viên
f2(&(const string &) f1(str));
Trong cả hai trường hợp trên f2
chức năng nên chấp nhận một tham số const string *
. Chỉ cần một string *
như trong trường hợp của bạn sẽ không hoạt động, trừ khi bạn bỏ đi constness từ đối số (trong đó, BTW, sẽ làm cho toàn bộ điều thậm chí xấu hơn nó đã là). Mặc dù, nếu bộ nhớ phục vụ tôi, trong cả hai trường hợp, không có sự đảm bảo rằng tham chiếu được đính kèm với bản gốc tạm thời và không được sao chép.
Chỉ cần nhớ rằng việc tạo con trỏ đến các đối tượng tạm thời là một thực tế khá đáng ngờ vì nếu các vấn đề về tuổi thọ rõ ràng. Thông thường bạn nên tránh sự cần thiết phải làm điều đó.
Nhưng tôi có thể sử dụng f1() như thế này: f1 (str) = "happy"; Ở đây tôi đang sử dụng tạm thời làm giá trị l. –
Happy Mittal, từ lvalue có thể hơi khó hiểu - nó không còn có nghĩa là "một giá trị có thể đứng ở phía bên trái của bài tập". khi bạn sử dụng toán tử '=', bạn đang thực sự gọi một hàm thành viên của đối tượng chuỗi. Bạn được phép sử dụng các thành viên của rvalues. – avakar
Vậy điều gì sẽ xảy ra nếu chuỗi có toán tử rõ ràng & {return this;}? – user168715