std::nullptr_t tipi
Açıklaması şöyle. nullptr Anahtar Kelimesi yazısına bakabilirsiniz.
Örnek
Elimizde şöyle bir kod olsun. "Standard Conversion Sequence", "User Defined Conversion Sequence" tan daha yüksek önceliğe sahiptir.
Açıklaması şöyle. nullptr Anahtar Kelimesi yazısına bakabilirsiniz.
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ı.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.
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 types3.9.1.10 A value of typestd::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 tosizeof(void*)
.
Hiç yorum yok:
Yorum Gönder