在我的課之一,我已經有了一個指針返回數組引用
Reservation * availability[30] = {nullptr};
(我當然有一些值後初始化)。
不過,我有一個getReservations()函數應該返回到30個元素的數組的引用,所以它可以像使用:
getReservations()[i] ...
我應該怎樣聲明函數?
在我的課之一,我已經有了一個指針返回數組引用
Reservation * availability[30] = {nullptr};
(我當然有一些值後初始化)。
不過,我有一個getReservations()函數應該返回到30個元素的數組的引用,所以它可以像使用:
getReservations()[i] ...
我應該怎樣聲明函數?
宣告返回引用數組函數的語法是這樣的:
Reservation * (& getReservations())[30];
當然,你可以看到,你不應該在現實生活中使用。相反,類型爲別名做到這一點:
using Reservations = Reservation * [30];
Reservations & getReservations();
或者,因爲數組是沒有邊界檢查反正只是返回一個指針,然後您就可以像索引數組:
Reservation * getReservations();
Reservation *(&getReservations())[30];
應該爲你做。
請記住懸掛引用和指針管理。
我會建議你使用現代C++:
using ReservationArray = std::array<Reservation*, 30>;
ReservationArray _availability;
,並傳回爲:
ReservationArray& getReservations()
原始指針在現代C++中仍然很有用。不要把「指針」誤認爲「擁有動態值」。那些是正交的概念。 –
確實如此,它們在某些特定情況下很有用。但爲什麼你會推薦在這裏使用原始指針? – purpletentacle
你做了(未經證實的)假設,這些指針擁有數據。如果他們不擁有,那麼'unique_ptr'會導致雙重刪除未定義行爲,這非常糟糕。這些指針可能是可空的引用,在這種情況下'Reservation *'是正確的使用。 –
附註:我個人初始化數組用'= {};'。它看起來像你認爲所有的元素都初始化爲你寫的'nullptr',但它們實際上是初始化值。 – Quentin
@Quentin,值初始化和nullptr初始化做同樣的事情,不是嗎?不過,我同意,以不同的方式處理第一個元素是愚蠢的。 – user2079303
@ user2079303是的,這是我的觀點。沒有功能差異,但有點誤導。 – Quentin