提问人:Sarim 提问时间:10/25/2023 更新时间:10/25/2023 访问量:78
为什么使用引用可以防止 C++ 中的数组衰减?[复制]
Why use of references prevent decay of arrays in C++? [duplicate]
问:
#include <iostream>
using namespace std;
int main()
{
int arr[3][3]
= { { 3, 2, 7 }, { 2, 6, 8 }, { 5, 1, 9 } };
for (auto& y : arr) {
for (int x : y) {
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}
在上面的代码中,如果我们使用代替类型,则将指针变成整数,而使用类型时,则为整数数组。为什么会这样?引用如何防止数组衰减到指针?auto
auto&
auto&
也可以创建对指针的引用,但为什么要创建对数组的引用?auto&
答:
2赞
Jan Schultke
10/25/2023
#1
数组到指针的“衰减”是 C++ 中两种效果的结果:
例如,数组无法复制,因此无效。
int array[] = other_array
必要时,通过数组到指针的转换将数组转换为指针。
这意味着 (1) 需要数组到指针的转换。 不是数组的副本,因为这是不可能的;它是一个指针。或者通俗地说,数组“衰减为指针”。auto y = some_array
y
但是,这不适用于引用绑定。引用可以绑定到任何类型,包括数组。不需要复制,也不需要数组到指针的转换。这意味着 in ,只需绑定到某个数组。auto& y = some_array
y
(1) y
到数组的这种初始化发生在基于范围的 for 循环中。有关此类循环扩展到什么的详细信息,请参阅 cppreference 一文。
下一个:结构数组中的指针问题
评论
std::cout << x
std::cout << a[i][j]
auto&
也可以创建对指针的引用”引用什么指针?计算由衰减产生的指针,它没有持久内存位置。