Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kata nullptr kunci mewakili nilai pointer null. Gunakan nilai penunjuk null untuk menunjukkan bahwa gagang objek, penunjuk interior, atau jenis penunjuk asli tidak menunjuk ke objek.
Gunakan nullptr dengan kode terkelola atau asli. Pengkompilasi memancarkan instruksi yang sesuai tetapi berbeda untuk nilai pointer null terkelola dan asli. Untuk informasi tentang menggunakan versi C++ standar ISO dari kata kunci ini, lihat nullptr.
Kata kunci __nullptr adalah kata kunci khusus Microsoft yang memiliki arti yang sama dengan nullptr, tetapi hanya berlaku untuk kode asli. Jika Anda menggunakan nullptr dengan kode C/C++ asli lalu mengkompilasi dengan opsi /clr compiler, pengkompilasi tidak dapat menentukan apakah nullptr menunjukkan nilai pointer null asli atau terkelola. Untuk memperjelas niat Anda kepada pengkompilasi, gunakan nullptr untuk menentukan nilai terkelola atau __nullptr untuk menentukan nilai asli.
Kata nullptr kunci setara dengan Tidak Ada di Visual Basic dan null di C#.
Penggunaan
Kata nullptr kunci dapat digunakan di mana saja handel, penunjuk asli, atau argumen fungsi dapat digunakan.
Kata nullptr kunci bukan jenis dan tidak didukung untuk digunakan dengan:
throw nullptr(meskipunthrow (Object^)nullptr;akan bekerja)
Kata nullptr kunci dapat digunakan dalam inisialisasi jenis pointer berikut:
Penunjuk asli
Handel Windows Runtime
Handel terkelola
Penunjuk interior terkelola
Kata nullptr kunci dapat digunakan untuk menguji apakah referensi pointer atau handle null sebelum referensi digunakan.
Panggilan fungsi di antara bahasa yang menggunakan nilai pointer null untuk pemeriksaan kesalahan harus ditafsirkan dengan benar.
Anda tidak dapat menginisialisasi handel ke nol; hanya nullptr dapat digunakan. Penugasan konstanta 0 ke handel objek menghasilkan kotak Int32 dan cast ke Object^.
Contoh: nullptr kata kunci
Contoh kode berikut menunjukkan bahwa nullptr kata kunci dapat digunakan di mana pun handel, penunjuk asli, atau argumen fungsi dapat digunakan. Dan contoh menunjukkan bahwa nullptr kata kunci dapat digunakan untuk memeriksa referensi sebelum digunakan.
// mcpp_nullptr.cpp
// compile with: /clr
value class V {};
ref class G {};
void f(System::Object ^) {}
int main() {
// Native pointer.
int *pN = nullptr;
// Managed handle.
G ^pG = nullptr;
V ^pV1 = nullptr;
// Managed interior pointer.
interior_ptr<V> pV2 = nullptr;
// Reference checking before using a pointer.
if (pN == nullptr) {}
if (pG == nullptr) {}
if (pV1 == nullptr) {}
if (pV2 == nullptr) {}
// nullptr can be used as a function argument.
f(nullptr); // calls f(System::Object ^)
}
Contoh: Gunakan nullptr dan nol secara bergantian
Contoh kode berikut menunjukkan bahwa nullptr dan nol dapat digunakan secara bergantian pada pointer asli.
// mcpp_nullptr_1.cpp
// compile with: /clr
class MyClass {
public:
int i;
};
int main() {
MyClass * pMyClass = nullptr;
if ( pMyClass == nullptr)
System::Console::WriteLine("pMyClass == nullptr");
if ( pMyClass == 0)
System::Console::WriteLine("pMyClass == 0");
pMyClass = 0;
if ( pMyClass == nullptr)
System::Console::WriteLine("pMyClass == nullptr");
if ( pMyClass == 0)
System::Console::WriteLine("pMyClass == 0");
}
pMyClass == nullptr
pMyClass == 0
pMyClass == nullptr
pMyClass == 0
Contoh: Menginterpretasikan nullptr sebagai handel
Contoh kode berikut menunjukkan bahwa nullptr ditafsirkan sebagai handel ke jenis apa pun atau penunjuk asli ke jenis apa pun. Jika fungsi kelebihan beban dengan handel ke berbagai jenis, kesalahan ambiguitas akan dihasilkan. Harus nullptr secara eksplisit dilemparkan ke jenis .
// mcpp_nullptr_2.cpp
// compile with: /clr /LD
void f(int *){}
void f(int ^){}
void f_null() {
f(nullptr); // C2668
// try one of the following lines instead
f((int *) nullptr);
f((int ^) nullptr);
}
Contoh: Cast nullptr
Contoh kode berikut menunjukkan bahwa transmisi nullptr diizinkan dan mengembalikan pointer atau handel ke jenis cast yang berisi nullptr nilai .
// mcpp_nullptr_3.cpp
// compile with: /clr /LD
using namespace System;
template <typename T>
void f(T) {} // C2036 cannot deduce template type because nullptr can be any type
int main() {
f((Object ^) nullptr); // T = Object^, call f(Object ^)
// Delete the following line to resolve.
f(nullptr);
f(0); // T = int, call f(int)
}
Contoh: Meneruskan nullptr sebagai parameter fungsi
Contoh kode berikut menunjukkan bahwa nullptr dapat digunakan sebagai parameter fungsi.
// mcpp_nullptr_4.cpp
// compile with: /clr
using namespace System;
void f(Object ^ x) {
Console::WriteLine("test");
}
int main() {
f(nullptr);
}
test
Contoh: Inisialisasi default
Contoh kode berikut menunjukkan bahwa ketika handel dinyatakan dan tidak diinisialisasi secara eksplisit, mereka secara default diinisialisasi ke nullptr.
// mcpp_nullptr_5.cpp
// compile with: /clr
using namespace System;
ref class MyClass {
public:
void Test() {
MyClass ^pMyClass; // gc type
if (pMyClass == nullptr)
Console::WriteLine("NULL");
}
};
int main() {
MyClass ^ x = gcnew MyClass();
x -> Test();
}
NULL
Contoh: Menetapkan nullptr ke penunjuk asli
Contoh kode berikut menunjukkan bahwa nullptr dapat ditetapkan ke penunjuk asli saat Anda mengkompilasi dengan /clr.
// mcpp_nullptr_6.cpp
// compile with: /clr
int main() {
int * i = 0;
int * j = nullptr;
}
Persyaratan
Opsi pengkompilasi: (Tidak diperlukan; didukung oleh semua opsi pembuatan kode, termasuk /ZW dan /clr)