tôi khuyên bạn không sử dụng nullptr
như định nghĩa ở trên, bởi vì nó có thể nguy hiểm. Nếu bạn muốn sử dụng nullptr
, câu lệnh sau phải đúng.
sizeof(nullptr) == sizeof(void*) == sizeof(any pointer)
Tuy nhiên, sizeof(nullptr)
(theo quy định ở trên) sẽ không tuân thủ quy tắc này. Nó sẽ thực sự đánh giá đến sizeof(bad nullptr) = 1
.
Đây là triển khai chính xác.
#pragma once
namespace std
{
//based on SC22/WG21/N2431 = J16/07-0301
struct nullptr_t
{
template<typename any> operator any *() const
{
return 0;
}
template<class any, typename T> operator T any:: *() const
{
return 0;
}
#ifdef _MSC_VER
struct pad {};
pad __[sizeof(void*)/sizeof(pad)];
#else
char __[sizeof(void*)];
#endif
private:
// nullptr_t();// {}
// nullptr_t(const nullptr_t&);
// void operator = (const nullptr_t&);
void operator &() const;
template<typename any> void operator +(any) const
{
/*I Love MSVC 2005!*/
}
template<typename any> void operator -(any) const
{
/*I Love MSVC 2005!*/
}
};
static const nullptr_t __nullptr = {};
}
#ifndef nullptr
#define nullptr std::__nullptr
#endif
Tôi đang sử dụng GCC và g ++ 4.8 và tôi không thể tìm thấy nullptr ..... – user997112
Thêm -std = C++ 11 vào dòng lệnh GCC của bạn. – sjaensch
vì trước GCC 4.6 không có nullptr, bạn có thể sử dụng "__null" –