Tôi đã luôn luôn biết rằng thực tế là yêu cầu tiêu chuẩn dereferencing null
là UB. Tuy nhiên,Dereference null không phải lúc nào cũng là UB?
(Link 1) nói
p = 0; * p; không phải là lỗi.
và cung cấp một liên kết đến
(Link 2) nói
* p không phải là một lỗi khi p là null trừ vế trái được chuyển đổi thành một giá trị trái
(Tôi tin đó là lỗi đánh máy và có lẽ nên đọc là lvalue được chuyển thành một số rvalue)
Link 1 cũng nói
char * p = 0; char * q = & * (p)
là "không xác định", mà tôi chỉ có thể đọc như cũng xác định hoặc ít nhất thực hiện xác định
thể một luật sư ngôn ngữ cung cấp một giải thích có thẩm quyền về những gì đang xảy ra?
Tôi không phải là luật sư ngôn ngữ nhưng việc đọc các liên kết của tôi là dereferencing là một con trỏ rỗng không có trong chính nó UB, chỉ sử dụng giá trị là. Và có, nó có vẻ là một lỗi đánh máy, nên được giá trị để rvalue, vì đó là cách nó được trích dẫn trong link1. Tôi nghĩ rằng nó có ý nghĩa trong trường hợp thành viên tĩnh, vì chỉ có kiểu tĩnh của 'toán tử *' là cần thiết, và link1 là, theo như tôi thấy, phù hợp với điều đó. – drRobertz
Nếu triển khai thực hiện nó segfault, đó là REALLY UB? Tôi không thể nghĩ ra điều đó. – Donnie