2017-05-07 70 views
3

在我的課之一,我已經有了一個指針返回數組引用

Reservation * availability[30] = {nullptr}; 

(我當然有一些值後初始化)。

不過,我有一個getReservations()函數應該返回到30個元素的數組的引用,所以它可以像使用:

getReservations()[i] ... 

我應該怎樣聲明函數?

+0

附註:我個人初始化數組用'= {};'。它看起來像你認爲所有的元素都初始化爲你寫的'nullptr',但它們實際上是初始化值。 – Quentin

+2

@Quentin,值初始化和nullptr初始化做同樣的事情,不是嗎?不過,我同意,以不同的方式處理第一個元素是愚蠢的。 – user2079303

+1

@ user2079303是的,這是我的觀點。沒有功能差異,但有點誤導。 – Quentin

回答

5

宣告返回引用數組函數的語法是這樣的:

Reservation * (& getReservations())[30]; 

當然,你可以看到,你不應該在現實生活中使用。相反,類型爲別名做到這一點:

using Reservations = Reservation * [30]; 

Reservations & getReservations(); 

或者,因爲數組是沒有邊界檢查反正只是返回一個指針,然後您就可以像索引數組:

Reservation * getReservations(); 
4
Reservation *(&getReservations())[30]; 

應該爲你做。

請記住懸掛引用和指針管理。

1

我會建議你使用現代C++:

using ReservationArray = std::array<Reservation*, 30>; 

ReservationArray _availability; 

,並傳回爲:

ReservationArray& getReservations() 
+2

原始指針在現代C++中仍然很有用。不要把「指針」誤認爲「擁有動態值」。那些是正交的概念。 –

+0

確實如此,它們在某些特定情況下很有用。但爲什麼你會推薦在這裏使用原始指針? – purpletentacle

+2

你做了(未經證實的)假設,這些指針擁有數據。如果他們不擁有,那麼'unique_ptr'會導致雙重刪除未定義行爲,這非常糟糕。這些指針可能是可空的引用,在這種情況下'Reservation *'是正確的使用。 –