Computer >> Máy Tính >  >> Lập trình >> C ++

Chính xác thì nullptr trong C ++ là gì?

Trong phần này, chúng ta sẽ thấy nullptr trong C ++. Nullptr biểu thị các ký tự của con trỏ. Nó là một giá trị prvalue của kiểu std ::nullptr_t. Nó có thuộc tính chuyển đổi ngầm định từ nullptr sang giá trị con trỏ null của bất kỳ loại con trỏ nào và bất kỳ con trỏ nào đến loại thành viên. Hãy để chúng tôi xem một chương trình để hiểu khái niệm này.

Ví dụ

#include<iostream>
using namespace std;
int my_func(int N){ //function with integer type parameter
   cout << "Calling function my_func(int)";
}
int my_func(char* str) { //overloaded function with char* type parameter
   cout << "calling function my_func(char *)";
}
int main() {
   my_func(NULL); //it will call my_func(char *), but will generate compiler error
}

Đầu ra

[Error] call of overloaded 'my_func(NULL)' is ambiguous
[Note] candidates are:
[Note] int my_func(int)
[Note] int my_func(char*)

Vậy vấn đề trong chương trình trên là gì? NULL thường được định nghĩa là (void *) 0. Chúng tôi được phép chuyển đổi NULL sang kiểu tích phân. Vì vậy, lệnh gọi hàm của my_func (NULL) là không rõ ràng.

Nếu chúng ta sử dụng nullptr thay cho NULL, chúng ta sẽ nhận được kết quả như bên dưới -

Ví dụ

#include<iostream>
using namespace std;
int my_func(int N){ //function with integer type parameter
   cout << "Calling function my_func(int)";
}
int my_func(char* str) { //overloaded function with char* type parameter
   cout << "calling function my_func(char *)";
}
int main() {
   my_func(nullptr); //it will call my_func(char *), but will generate compiler error
}

Đầu ra

calling function my_func(char *)

Chúng ta có thể sử dụng nullptr ở tất cả những nơi mà NULL được mong đợi. Giống như NULL, nullptr cũng có thể được chuyển đổi thành bất kỳ kiểu con trỏ nào. Nhưng điều này không hoàn toàn có thể chuyển đổi thành kiểu tích phân như NULL.