Trong tiêu chuẩn C++ 11, tôi không hiểu lý do tại sao lấy địa chỉ của nullptr không được phép trong khi một là được phép lấy địa chỉ của trường hợp std :: nullptr_t của riêng chúng. Ngoài thực tế là nullptr là một từ khóa dành riêng, có bất kỳ lý do được chỉ định nào cho quyết định này không?Tại sao bạn không thể lấy địa chỉ của nullptr?
Đơn giản bởi vì nó cực kỳ phấn khích tôi, tôi đã cố gắng đi vòng quanh hạn chế này với các chức năng sau:
decltype(nullptr)* func(const decltype(nullptr) &nref) noexcept
{
return const_cast<decltype(nullptr)*>(reinterpret_cast<const decltype(nullptr)*>(&nref));
}
tôi đã phải sử dụng reinterpret_cast trên tham số bởi vì không có nó tôi đã nhận được báo lỗi cuồng loạn:
error: invalid conversion from 'std::nullptr_t*' to 'std::nullptr_t*' [-fpermissive]
Khi tôi gọi hàm này bằng cách chuyển trực tiếp nullptr mỗi lần tôi nhận được một địa chỉ khác. Có phải nullptr được gán động một địa chỉ đúng lúc để so sánh hay không? Hoặc (có lẽ nhiều khả năng hơn) có lẽ là trình biên dịch buộc một bản sao tạm thời của đối tượng cơ bản? Tất nhiên không ai trong số này là thông tin quan trọng, tôi chỉ thấy nó thú vị lý do tại sao hạn chế cụ thể này được thực hiện (và sau đó tại sao tôi thấy hành vi của tôi).
'nullptr' là giá trị chính xác. Bạn không thể lấy địa chỉ của những người đó. 1 cho thông báo lỗi, mặc dù. – chris