Mamy teraz C ++ 11 z wieloma nowymi funkcjami. Ciekawym i mylącym (przynajmniej dla mnie) jest nowy nullptr
.
Cóż, nie trzeba już nieprzyjemnego makra NULL
.
int* x = nullptr;
myclass* obj = nullptr;
Nadal nie rozumiem, jak nullptr
działa. Na przykład artykuł w Wikipedii mówi:
C ++ 11 naprawia to, wprowadzając nowe słowo kluczowe, które ma służyć jako wyróżniona stała wskaźnika zerowego: nullptr. Jest typu nullptr_t , który jest domyślnie konwertowalny i porównywalny z dowolnym typem wskaźnika lub typem wskaźnika do elementu. Nie jest domyślnie konwertowalny ani porównywalny z typami integralnymi, z wyjątkiem bool.
Jak to jest słowo kluczowe i instancja typu?
Czy masz też inny przykład (oprócz Wikipedii), gdzie nullptr
jest lepszy od starego, dobrego 0
?
nullptr_t
zagwarantowane jest posiadanie tylko jednego członka nullptr
? Tak więc, jeśli funkcja została zwrócona nullptr_t
, to kompilator już wie, która wartość zostanie zwrócona, niezależnie od treści funkcji?
std::nullptr_t
Można utworzyć instancję @AaronMcDaid , ale wszystkie instancje będą identyczne, nullptr
ponieważ typ jest zdefiniowany jako typedef decltype(nullptr) nullptr_t
. Uważam, że głównym powodem tego typu jest to, że funkcje mogą być przeciążone specjalnie w celu przechwycenia nullptr
, jeśli to konieczne. Zobacz tutaj przykład.
nullptr
służy również do reprezentowania pustego odwołania dla zarządzanych uchwytów w C ++ / CLI.