我有一个问题。 可以将指针向量用作参考向量吗?
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)
谢谢。
答案 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);
您不能更改参考值。未初始化的引用不存在。一旦初始化,就无法对其进行更改。 另一方面,指针具有类似的目的:它们允许从不同的位置访问相同的数据。您始终可以更改指针指向的内容。但是指针也更容易出错,因为它们可以被未初始化或空初始化。因此,如果您不需要这种灵活性,请尝试参考。