这有效:
void foo(int (&a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
void foo(int (*a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
Run Code Online (Sandbox Code Playgroud)
我考虑int (&a)[3]并int (*a)[3]具有相同的含义!
您的代码类似于:
void foo(vector<int>& a) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
void foo(vector<int>* a) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
Run Code Online (Sandbox Code Playgroud)
第一个作品和它的作品在第二个没有出于同样的原因int (&a)[3],并没有上int (*a)[3].当您使用指向集合而不是引用的指针时,需要在将它们传递给标准库的begin/ 时取消引用它们end.
void foo(vector<int>* a) {
auto ibegin = begin(*a);
auto ebegin = end(*a);
}
void foo(int (*a)[3]) {
auto ibegin = begin(*a);
auto ebegin = end(*a);
}
Run Code Online (Sandbox Code Playgroud)
我考虑
int (&a)[3]并int (*a)[3]具有相同的含义!
绝对不.int (&a)[3]声明对数组的引用,并int (*a)[3]声明一个指向数组的指针.这些在大多数方面是不同的,引用int和指针int是不同的.(虽然涉及C风格的数组时,自动数组到指针的转换有时会使事情变得复杂.)