Tôi biết rằng số học con trỏ không được phép cho con trỏ null. Nhưng hãy tưởng tượng tôi có một cái gì đó như thế này:
class MyArray {
int *arrayBegin; // pointer to the first array item, NULL for an empty array
unsigned arraySize; // size of the array, zero for an empty array
public:
int *begin() const { return arrayBegin; }
int *end() const { return arrayBegin + arraySize; } // possible? (arrayBegin may be null)
Có thể (được phép) để end()
thực hiện ở trên ? Hoặc là cần thiết phải có:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
để tránh số học con trỏ với nullptr vì arrayBegin
null cho một mảng trống (mặc dù arraySize
cũng bằng 0 trong trường hợp này)?
Tôi biết có thể lưu trữ int *end;
thay vì unsigned size;
và để kích thước được tính như end-begin
- nhưng sau đó lại xuất hiện cùng một vấn đề: Có được phép tính toán nullptr - nullptr
không?
Tôi đặc biệt đánh giá cao tài liệu tham khảo tiêu chuẩn.