这个有效:
void foo(int (&a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
虽然这不是:
void foo(int (*a)[3]) {
auto ibegin = begin(a);
auto ebegin = end(a);
}
我认为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);
}
第一个有效,第二个无效,原因与它在 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);
}
关于c++ - 为什么我不能将 std::begin/std::end 与 int(*p)[3] 一起使用,而我可以与 int(&p)[3] 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50341627/