Cho phép có một cái nhìn đến hai chức năng này:Đối tượng tạm thời có bị xóa nếu không có tham chiếu const nào không?
std::string get_string()
{
std::string ret_value;
// Calculate ret_value ...
return ret_value;
}
void process_c_string(const char* s)
{
std::cout << s << endl;
}
Và đây là hai cuộc gọi có thể có của process_c_string
với lập luận được trả về bởi get_string
.
Nếu không có ràng buộc const tham chiếu đến đối tượng trả về
get_string
.process_c_string(get_string().c_str());
Với tham chiếu const ràng buộc đối tượng trả về
get_string
.const std::string& tmp_str = get_string(); process_c_string(tmp_str.c_str());
Tôi biết rằng Cách thứ hai là hợp lệ, nhưng những gì về người đầu tiên, những gì hiện tiêu chuẩn nói về trường hợp này? Liệu đối tượng tạm thời trả về trước get_string
có bị xóa trước khi process_c_str
kết thúc vì không có const reference
đối với nó không?
Lưu ý: Cả hai phiên bản đều ổn trong MSVC.