使用指针向量引用向量是非法的?

时间:2019-09-25 05:25:29

标签: c++ pointers reference c++98

我有一个问题。 可以将指针向量用作参考向量吗?

Struct Child
{
    int n;
    void func(int _n) 
    { 
        n = _n;
    };

}

struct Parent
{
    std::vector<Child> vec;    
}

void func(Parent* p)
{
    std::vector<Child>& ref = p->vec;  // is this ok?
    int value = 10;
    ref[0].func(value); // is this ok?
}

int main()
{
...
...
    Parent p;
    func(&p);
...
...


    return 0;
}

编译器gcc 4.4.7(在c ++ 11下)
我想,如果更改参考值可以吗?

ref[0].func(value)

谢谢。

2 个答案:

答案 0 :(得分:1)

std::vector<Child>& ref = p->vec;  // is this ok? yes
int value = 10;
ref->func(value); // is this ok? no

ref不是指针,所以您不能使用成员访问运算符->

ref是一个向量,因此您需要选择要使用的Child。

ref[ child_index ].func(value);

答案 1 :(得分:0)

引用不过是对象的另一个名称。这些都是一样的:

std::vector<Child>& ref = p->vec;
std::vector<Child>& vecAlias = ref;
int value = 10;
ref[0].func(value);
vecAlias[0].func(value);
p->vec[0].func(value);

您不能更改参考值。未初始化的引用不存在。一旦初始化,就无法对其进行更改。 另一方面,指针具有类似的目的:它们允许从不同的位置访问相同的数据。您始终可以更改指针指向的内容。但是指针也更容易出错,因为它们可以被未初始化或空初始化。因此,如果您不需要这种灵活性,请尝试参考。