12
#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;
}

P 指向 ia 中第一个元素的指针。为什么它说“错误:没有匹配的函数来调用'begin(int *&)'c ++”谢谢!:)

4

3 回答 3

13

因为在里面print(),变量ia是一个指针,而不是一个数组。begin()调用指针是没有意义的。

于 2013-07-25T02:54:03.233 回答
7

您在指针上使用beginendfree 函数,这是不允许的。

你可以用 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;
}
于 2013-07-25T03:30:16.773 回答
6

正如其他人指出的那样,您的数组正在衰减为指针。衰减是 C 的历史产物。要做你想做的事,将数组作为参考传递并推断数组大小:

template<size_t X>
void print(int (&ia)[X])
{
    int *p = begin(ia);
    while(p != end(ia))
        cout<<*p++<<'\t';
}

print(ia);
于 2013-07-25T03:44:59.830 回答