tôi chỉ xây dựng một trong những dự án của chúng tôi tại nơi làm việc và tôi thấy một chức năng mới được bổ sung:Cảnh báo C4172: Trả lại tham chiếu đến const std :: chuỗi được liên kết với biến cục bộ. Làm thế nào an toàn là nó?
const std::string& ClassName::MethodName() const
{
return "";
}
Trình biên dịch đưa ra một cảnh báo:
Cảnh báo C4172: trở về địa chỉ của biến cục bộ hoặc tạm thời
Tôi nghĩ trình biên dịch là đúng. Chức năng này an toàn đến mức nào?
Lưu ý rằng hàm không trả về const char*
, điều này có thể được chấp nhận vì chuỗi ký tự chuỗi có thời lượng lưu trữ tĩnh. Nó trả về một tham chiếu đến const std::string
Tôi đã suy nghĩ dọc theo các dòng kéo dài tuổi thọ của một giới hạn tạm thời thành tham chiếu const ... Ý tôi là, có thể nó *** là *** an toàn?Tôi muốn chắc chắn trước khi nói chuyện với nhà phát triển đã thêm chức năng –
@Armen Tsirunyan, nó an toàn cho đến khi bạn gọi bất kỳ chức năng nào. và thậm chí nếu bạn không gọi hàm, bạn không thể sử dụng nó, bởi vì mọi thứ có thể sử dụng nó là một hàm. và thậm chí nếu bạn tìm cách sử dụng nó mà không có bất kỳ chức năng nào, trình biên dịch có thể sắp xếp lại mã của bạn và đặt một hàm ở giữa. vì vậy nó không an toàn trong bất kỳ cách nào – Dani
@ Als: Tôi không thể nói rằng tôi hài lòng với câu trả lời. Nếu tuổi thọ của một lỗi tạm thời cục bộ không thể được mở rộng ra ngoài phạm vi của nó (mà tôi không biết nếu nó là trường hợp) thì bạn đã đúng, ** nhưng ** trong trường hợp này ràng buộc giá trị trả về của hàm đến tham chiếu const sẽ không giúp ích gì. Nếu nó có thể được mở rộng bên ngoài chức năng, thì nó không liên quan cho dù tôi có ràng buộc hay sao chép nó ... –