Tiêu chuẩn nói rằng dereferencing con trỏ null dẫn đến hành vi không xác định. Nhưng "con trỏ rỗng" là gì? Trong mã sau đây, những gì chúng tôi gọi là "con trỏ null":Điều nào trong số này sẽ tạo ra một con trỏ rỗng?
struct X
{
static X* get() { return reinterpret_cast<X*>(1); }
void f() { }
};
int main()
{
X* x = 0;
(*x).f(); // the null pointer? (1)
x = X::get();
(*x).f(); // the null pointer? (2)
x = reinterpret_cast<X*>(X::get() - X::get());
(*x).f(); // the null pointer? (3)
(*(X*)0).f(); // I think that this the only null pointer here (4)
}
Tôi nghĩ rằng dereferencing của con trỏ null chỉ diễn ra trong trường hợp cuối cùng. Tôi có đúng không? Có sự khác biệt giữa thời gian biên dịch null con trỏ và thời gian chạy theo C + + Standard?
Đó không phải là bài tập về nhà. Tiêu chuẩn C++ nói không nhiều về dereferencing các con trỏ null. Tôi chỉ muốn biết. –
Phần đầu tiên của câu trả lời của tôi ở đây nói về dereferencing null con trỏ: http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in- undefined-behav (Tôi thích câu hỏi đó.) – GManNickG