ฉันรู้ว่าเลขคณิตตัวชี้นั้นไม่ได้รับอนุญาตสำหรับพอยน์เตอร์พอยน์เตอร์ แต่ลองนึกภาพฉันมีสิ่งนี้:
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)
เป็นไปได้ (อนุญาต) ให้มีการend()
ใช้งานข้างต้นหรือไม่ หรือจำเป็นต้องมี:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
การหลีกเลี่ยงตัวชี้ทางคณิตศาสตร์ด้วย nullptr เพราะarrayBegin
เป็นโมฆะสำหรับอาร์เรย์ว่างเปล่า (แม้จะarraySize
เป็นศูนย์ในกรณีนี้)?
ฉันรู้ว่าเป็นไปได้ในการจัดเก็บint *end;
แทนunsigned size;
และอนุญาตให้คำนวณขนาดเป็นend-begin
- แต่แล้วก็มีปัญหาเดียวกัน: อนุญาตให้คำนวณได้nullptr - nullptr
หรือไม่
ฉันจะขอขอบคุณอ้างอิงมาตรฐาน