12 Eylül 2018 Çarşamba

std::nullptr_t - nullptr Anahtar Kelimesinden Farklıdır

std::nullptr_t tipi
Açıklaması şöyle. nullptr Anahtar Kelimesi yazısına bakabilirsiniz.
std::nullptr_t is the type of the null pointer literal, nullptr. It is a distinct type that is not itself a pointer type or a pointer to member type.
Bu tip "Effective C++ 2nd Edition" ("Effective Modern C++" değil) Item 25'te şöyle tanımlı. Yani çok eskiden beri olan bir fikir. Edition 3'te kaldırıldı.
const // It is a const object...
class nullptr_t 
{
public:
  template<class T>
  inline operator T*() const // convertible to any type of null non-member pointer...
  { return 0; }

  template<class C, class T>
  inline operator T C::*() const   // or any type of null member pointer...
  { return 0; }

private:
  void operator&() const;  // Can't take address of nullptr

} nullptr = {};
std::nullptr_t İçin Standard Conversion Sequence
Örnek
Elimizde şöyle bir kod olsun. "Standard Conversion Sequence", "User Defined Conversion Sequence" tan daha yüksek önceliğe sahiptir.
class T {
public:
  T() {
    dump("default ctor");
  }

  T(std::nullptr_t) {
    dump("ctor from nullptr_t");
  }

  T(const T&) {
    dump("copy ctor");
  }

  T& operator=(const T&) {
    dump("copy operator=");
    return *this;
  }

  T& operator=(std::nullptr_t) {
    dump("operator=(std::nullptr_t)");
    return *this;
  }

  T& operator=(const std::vector<int>&) {
    dump("operator=(vector)");
    return *this;
  }
};
Çıktı olarak şunu alırız.
default ctor
operator=(std::nullptr_t)
sizeof(std::nullptr_t)
void* ile aynı olmalıdır.
3.9.1 - Fundamental types
3.9.1.10 A value of type std::nullptr_t is a null pointer constant (4.10). Such values participate in the pointer and the pointer to member conversions (4.10, 4.11). sizeof(std::nullptr_t) shall be equal to sizeof(void*).

Hiç yorum yok:

Yorum Gönder