30/09/2018, 17:57
Hỏi về sự khác nhau giữa Null, "", 0
Xin chào mọi người,
Mình có các biến như sau :
String a = “”;
String b = null;
int c = 0;
int d = null;
Việc khai báo giá trị là null, có khác gì so với giá trị là 0 hay “” : Về tốc độ và cấu trúc bộ nhớ. Mong mọi người giúp đỡ, mình xin cảm ơn !
Bài liên quan
Mình có đọc đâu đó là NULL được define kiểu #define NULL 0, vậy NULL hoặc 0 cũng thực chất là giống nhau đúng ko nhỉ còn cái nullptr là dành riêng cho pointer (câu trả lời không liên quan cho lắm)
Sau 1 hồi google thì mình tìm hiểu được là String a = “”; thì nó sẽ tạo 1 string tạm với nội dung là “” rồi copy constructor được gọi để tạo string a (tức là 2 bước lận).
Bạn muốn nhanh thì dùng kiểu string a(""); thì nó sẽ khởi tạo trực tiếp - là nhận vào parameter const char * nên gọi cái constructor tương ứng.
Còn cái string b = null; có khác gì không thì mình ko biết
Mình mới debug trong VS xong:
String a = “” là khởi tạo biến a kiểu class, xong là gọi copy contructor chuỗi rỗng, biến a không phải pointer mà là cả cái dữ liệu String đó.
C++ không có null mà chỉ có NULL thôi, nó chính là số 0.
String b = NULL biên dịch được nhưng chạy là báo lỗi, do compiler hiểu NULL ở đây là một pointer trỏ đến chuỗi, nhưng pointer này bằng 0 nên báo lỗi bằng assert.
int c = 0;
và int d = NULL đều là một, không khác nhau, mỗi biến chiếm sizeof(int) byte zero trên bộ nhớ.
Nói thêm là về vấn đề NULL hay 0 khá là nhập nhằng, nên lên chuẩn C++11 có thêm từ khóa nullptr cho khỏi lộn xộn.
“int c = 0; và int d = NULL đều là một” lần đầu nghe đấy. Bạn debug giúp mình xem c = 0 và d = 100, rồi dùng sizeof() xem kết quả giống nhau không nhé
Giống nhau mà bạn:
Căn bản là nó khác nhau về giá trị. Bạn lại đi so sánh lưu lượng vùng nhớ của nó làm gì
NULL với 0 mình chắc chắn nó giống nhau nhé bạn, NULL được định nghĩa bằng cách
#define NULL 0;
http://bytes.com/topic/c/answers/61514-question-about-null
Bạn tham khảo link này.