使用指针向量到参考向量是非法的吗?

Using pointer vector to reference vector is illegal?

本文关键字:向量 非法 参考 指针      更新时间:2023-10-16

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

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)

谢谢。

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

ref 不是指针,因此不能使用成员访问运算符 ->

ref 是一个向量,所以你需要选择你想使用哪个孩子。

ref[ child_index ].func(value);

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

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);

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