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.