现在的位置: 首页 > 综合 > 正文

C++中的数组引用与“引用数组”

2013年10月04日 ⁄ 综合 ⁄ 共 657字 ⁄ 字号 评论关闭

先说数组引用:

  一、从所谓的"数组降价"说起:

 

void test(int arr[20])

        {

std::cout << sizeof(arr);  //  4

        }

 

而实际上:

 

int main()

{

int arr[20];

std::cout << sizeof(arr); // sizeof(int) * 4

}

 

然而,若是这样呢:

 

void test(int (&arrRef)[20])

{

std::cout << sizeof(arrRef); //  sizeof(int) * 4

}

 

遗憾在于:

 

int main()

{

int a[20];

test(a);   //  ok

  

int b[10];

test(b);  //   Error

}

 

使用数组引用,限定了数组元素的个数。当然可以用函数模板尝试解决这个问题:

 

template <int size>

void test(int (&arrRef)[size])

{

for (int i = 0; i < size; ++i)

{

++arrRef[i];

}

}

 

int main()

{

int a[3];

test(a); // ok

 

int b[5];

test(b); // ok, too

}

 

用函数模板解决的弊端: 函数模板在编译时期实例化,调用多少个不同长度的数组,就会生成多少份实例代码;

 

定义一个数组引用类型: typedef int (&arrRef)[10];

 

二、 再说“引用数组”

标准暂不支持。

因此想类似这样的,就死心吧:

 

int i = 1;

int j = 2;

int& arrRef[] = {...}; // "int& arrRef[]" is wrong

抱歉!评论已关闭.