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 nullptrdział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 nullptrjest lepszy od starego, dobrego 0?
nullptr_tzagwarantowane 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_tMożna utworzyć instancję @AaronMcDaid , ale wszystkie instancje będą identyczne, nullptrponieważ 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.
nullptrsłuży również do reprezentowania pustego odwołania dla zarządzanych uchwytów w C ++ / CLI.