问题是制作一个由 10 个整数组成的数组,这很好
int array[10];
现在的问题是
如何制作我上面声明的reference
?array
我试过这个
int &ra = a;
但这给了我错误...请向我提供有关此错误的详细信息以及如何reference
制作array
.
int (&ra)[10] = a;
或者,您可以使用 typedef 将其分隔为“10 个整数数组”的类型并对其进行引用,如下所示:
typedef int int10[10];
int10& my_ref = a;
你的问题int &ra = a;
是它告诉编译器创建一个引用类型的引用int
......array of 10 ints
它们只是不一样的东西。考虑这sizeof(int)
是十个数组大小的十分之一int
——它们占用不同数量的内存。特定字符可以满足您对引用类型的要求,例如int& ra = a[0];
.
我很欣赏这int* p = a;
是允许的有点令人困惑 - 为了与不太安全的 C 兼容,指针可用于访问单个元素或数组,尽管不保留有关数组大小的任何信息。这是更喜欢引用的一个原因——它们比指针增加了一点安全性和功能。
对于增加功能的示例,您可以获取并获取数组 ( )sizeof(my_ref)
中的字节数,而会给您指针 ( ) 的大小和. 您可以使用这样的代码“捕获”数组维度以在函数中使用:int
10 * sizeof(int)
sizeof p
sizeof(int*)
sizeof *p == sizeof(int)
template <int N>
void f(int (&x)[N])
{
std::cout << "I know this array has " << N << " elements\n";
}
对数组的引用将具有类型int (&a)[10]
。
int array[10];
int (&a)[10] = array;
有时使用简化一些事情可能会很有用typedef
typedef int (&ArrayRef)[10];
...
ArrayRef a = array;
这是对大小为 10 的整数数组的引用:
int (&ra)[10];
所以
int (&ra)[10] = a;
您可以 typedef 数组类型(类型不应不完整),如下所示:
#define LEN 10
typedef int (array)[LEN];
int main(void)
{
array arr = {1, 2, 3, 4, 5}; //define int arr[10] = {1, 2, 3, 4, 5};
array arr2; //declare int arr[10];
array *arrptr = &arr; // pointer to array: int (*arrptr)[10] = &arr;
array &&arrvef; // declare rvalue reference to array of 10 ints
array &ref = arr; // define reference to arr: int (&ref)[10] = arr;
}