Xét đoạn mã sau trong C++:Không trả về một đối tượng tạm thời tạo một đối tượng tạm thời trong C++?
struct A {A(int);};
A foo() {return static_cast<A>(0);}
A x = foo();
Đây static_cast<A>(0)
tạo ra một đối tượng tạm thời bởi các tiêu chuẩn [5.2.9-4], mà là một prvalue. Các tiêu chuẩn [12,2-1] nói
temporaries của kiểu lớp được tạo ra trong những bối cảnh khác nhau: ràng buộc một tham chiếu đến một prvalue (8.5.3), trả lại một prvalue (6.6.3), một chuyển đổi tạo ra một giá trị (4.1, 5.2.9, 5.2.11, 5.4), ném một ngoại lệ (15.1), nhập một trình xử lý (15.3), và trong một số lần khởi tạo (8.5).
Vì vậy, câu lệnh trả về sẽ tạo lại đối tượng tạm thời?
Nhân tiện, bất cứ ai có thể vui lòng cho tôi biết liệu tiêu chuẩn đảm bảo chuyển đổi loại tiềm ẩn sẽ tạo ra một đối tượng tạm thời không?
Điều này sẽ là RVO'd – SingerOfTheFall
https://en.wikipedia.org/wiki/Return_value_optimization – LBes
Nó được phép tạo tạm thời, nhưng có thể sẽ không được. Xem [Cách tốt nhất để trả về một lớp trong C++] (http://stackoverflow.com/questions/12505563/best-way-to-return-a-class-in-c) –