2017-05-07 38 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 *'是正确的使用。 –