Bây giờ chúng ta có C ++ 11 với nhiều tính năng mới. Một điều thú vị và khó hiểu (ít nhất là đối với tôi) là cái mới nullptr
.
Vâng, không cần nữa cho macro khó chịu NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Tuy nhiên, tôi không nhận được làm thế nào nullptr
hoạt động. Ví dụ, bài viết Wikipedia nói:
C ++ 11 sửa lỗi này bằng cách giới thiệu một từ khóa mới để phục vụ như một hằng con trỏ null phân biệt: nullptr. Nó thuộc loại nullptr_t , có thể chuyển đổi hoàn toàn và có thể so sánh với bất kỳ loại con trỏ hoặc loại con trỏ thành thành viên. Nó không hoàn toàn có thể chuyển đổi hoặc so sánh với các loại tích phân, ngoại trừ bool.
Làm thế nào nó là một từ khóa và một thể hiện của một loại?
Ngoài ra, bạn có một ví dụ khác (bên cạnh Wikipedia không) ở đâu nullptr
tốt hơn cũ 0
?
nullptr_t
đảm bảo chỉ có một thành viên , nullptr
? Vì vậy, nếu một hàm được trả về nullptr_t
, thì trình biên dịch đã biết giá trị nào sẽ được trả về, bất kể phần thân của hàm là gì?
std::nullptr_t
có thể được khởi tạo, nhưng tất cả các trường hợp sẽ giống hệt nhau nullptr
vì loại được xác định là typedef decltype(nullptr) nullptr_t
. Tôi tin rằng lý do chính loại tồn tại là để các chức năng có thể bị quá tải đặc biệt để bắt nullptr
, nếu cần thiết. Xem ở đây cho một ví dụ.
nullptr
cũng được sử dụng để thể hiện tham chiếu null cho các thẻ điều khiển được quản lý trong C ++ / CLI.