#include <iostream>
#include <iterator>
using namespace std;
void print(int ia[])
{
int *p = begin(ia);
while(p != end(ia))
cout<<*p++<<'\t';
}
int main()
{
int ia[] = {1,2,3,4},i;
print(ia);
return 0;
}
指向ia中第一个元素的P指针。 为什么它说“错误:没有匹配函数来调用'begin(int *&amp;)'c ++” 感谢:!)
答案 0 :(得分:12)
因为在print()
内,变量ia
是指针,而不是数组。在指针上调用begin()
是没有意义的。
答案 1 :(得分:6)
您在指针上使用begin
和end
个免费函数,这是不允许的。
你可以用C ++ 11的intializer_list
//g++ -std=c++0x test.cpp -o test
#include <iostream>
#include <iterator>
using namespace std;
void print(initializer_list<int> ia)
{
auto p = begin(ia);
while(p != end(ia))
cout<<*p++<<'\t';
}
int main()
{
print({1,2,3,4});
return 0;
}
答案 2 :(得分:5)
正如其他人指出的那样,你的数组正在衰减为指针。衰减是来自C的历史人工制品。要做你想做的事,将数组作为参考并推导出数组大小:
template<size_t X>
void print(int (&ia)[X])
{
int *p = begin(ia);
while(p != end(ia))
cout<<*p++<<'\t';
}
print(ia);