Nó rất có thể là bạn quên -std = C++ 0x. Phiên bản gw của tôi là 4.6.1/4.7.1, cả hai đều hỗ trợ nullptr tốt.
Theo mô tả trong "Thư viện chuẩn C++, hướng dẫn và tham chiếu, thứ 2", nullptr là từ khóa, có thể tự động chuyển đổi thành từng loại con trỏ chứ không phải kiểu số nguyên, điều này khắc phục nhược điểm của NULL. chức năng quá tải sau đây: void f (int); void f (void *);
f (NULL); // Không rõ ràng f (nullptr); // OK
thử nghiệm tính năng này trong VC2010 cho thấy rằng những cuộc xung đột tài liệu MSDN với trình biên dịch thực tế, tài liệu cho biết:
Từ khóa nullptr không phải là một loại và không được hỗ trợ để sử dụng với:
sizeof
typeid
ném nullptr
trên thực tế trong VC2010, tất cả các nhà điều hành/nhanh trên ion là hợp pháp. sizeof (nullptr) kết quả 4. typeid.name() kết quả std :: nullptr_t, và ném nullptr có thể bị bắt bởi "const void *" và "void *" (và các kiểu con trỏ khác).
Trong khi gcc (4.7.1) trông cứng nhắc hơn về nullptr, ném nullptr không thể bị bắt bởi "void *", có thể bị bắt bởi '...'
Cảm ơn. Bạn cũng biết nếu có một cách để phát hiện nếu 'nullptr' được thực hiện, mà không dựa vào phiên bản của __cplusplus (bởi vì về mặt kỹ thuật tôi đang sử dụng C++ 0x, và nullptr không có) – nuzz
@nuzz: Sau đó bạn aren không sử dụng C++ 0x. :) – Bill
Vâng, tôi đang sử dụng một phần của C++ 0x;) – nuzz