【C++】為什麼不能定義陣列的引用,卻可定義變數的引用

風塵_NULL發表於2017-07-26
陣列的引用的可以定義的,比如:
int a[10];
int(&ra)[10]=a;
或者:
int* const& ra=a; 
//陣列是個地址,那麼先定義一個int地址的引用int*& ,陣列名有const特性,所以引用也要是個const,於是用const修飾& 就有int* const& ra=a; 
這個實際上是個指標的引用,和int(&ra)[10]=a;還是有區別的。 int(&ra)[10]=a;這是個真正的陣列的引用,用sizeof(ra)可以看出區別.
 
但不能定義引用陣列,就是所有元素都是引用的陣列:
int& ra[10];  //這個是不行的 ,定義陣列時要分配空間,而引用是不佔用記憶體空間的,所以c++規定不可以定義引用陣列

//陣列引用傳遞例子如下: bool array_assign(int (&p)[3],int (&q)[3]){
 //std::cout<<sizeof(p)<<std::endl;
 if(sizeof(p)!=sizeof(q)){
 std::cout<<"The subscript values do not match@!!!"<<std::endl;
 return false;
 }
 for(size_t i=0;i<sizeof(q)/sizeof(q[0]);i++){
 p[i]=q[i];
 }
 return true;



}
int main()
{


 int a[3]={2,8,16};
 int b[3];
 bool rest;
 rest=array_assign(b,a);
 if(rest){
 for(size_t i=0;i<3;i++){
 std::cout<<b[i]<<std::endl;
 }
 }
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30221425/viewspace-2142581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章