【发布时间】:2015-03-17 10:02:54
【问题描述】:
我正在学习 c++,我的教科书(c++ 入门)提出了这个例子:
int odd[] = {1,3,5,7,9};
int even[] = {0,2,4,6,8};
// returns a pointer to an array of five int elements
auto arrPtr(int i) -> int(*)[5]
{ return (i%2) ? &odd : &even;}
并且作为练习要求更改函数以使其返回对数组的引用:
auto arrPtr(int i) -> int(&)[5]
{ return (i%2) ? odd : even;}
我不明白为什么必须返回数组对象才能将其转换为对该数组的引用(如果我正确理解代码的话)。数组的内存地址不应该完全“适合”引用类型吗?
【问题讨论】:
-
不,参考不是地址。它是现有对象的别名。
-
因为对 T 的引用是使用 T 类型的对象初始化的,而不是指向 T 的指针。
-
只需添加这个:
template <class T> operator T& (T* j) { return *j; }(开玩笑。实际上不要这样做。) -
引用不只是一个地址吗?地址不只是一个整数吗?整数不只是一堆位吗?答案是“是的,在一些抽象级别”。 C++ 恰好在不同的抽象级别上运行。
-
int(&)[5]是一个引用类型;它是对 int 类型范围 5 的数组的引用。
标签: c++ arrays pointers reference