【发布时间】:2015-12-11 17:04:42
【问题描述】:
这是来自github.com/pezy/CppPrimer 的一个小程序。
int ia[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
// a range for to manage the iteration
for (const int(&p)[4] : ia)
for (int q : p) cout << q << " ";
cout << endl;
只是想知道为什么这里 const int(&p)[4] 用在 for 的范围内。
我本来打算使用for(int p[4] : ia),因为我认为这样p 会变成int[4],所以无论是通过值还是通过引用,当p 中的每个元素都可以在下一行工作由q 访问。
但是当我尝试for(int p[4] : ia) 时,编译器说不能使用int* 来初始化int[]。我只是不知道为什么。
此外,我知道这段代码行不通:
int i = 10;
int *c= &i;
int &p = c;
一个引用不能用指针初始化,但是根据编译器给出的错误,似乎正好在这个范围内。
【问题讨论】:
-
声明
int(&p)[4]将p声明为对四个整数数组 的引用。碰巧,ia是一个由三个四个整数组成的数组.. 组成的数组 -
@5gon12eder 不,不是。如果您正在考虑内括号,它们是可选的:)
-
@Quentin 是的,对不起。混淆了 C 和 C++。
-
请注意
int &p = c;是错误的,因为您无法将指针分配给引用,但您可以取消引用指针以获取引用:int &p = *c;hth -
顺便说一句,如果你不想看到奇怪的数组引用语法,你可以使用自动类型推导:
for (const auto& p : ia) ...
标签: c++ arrays pointers reference