在C++向量中使用解引用运算符

Using the dereference operator in C++ vectors

本文关键字:引用 运算符 C++ 向量      更新时间:2023-10-16

1)和2)之间的差值是什么,它们的值是什么:

1) double h = (*Jill_data)[5];
2) double h = *Jill_data[5];

当我们有一个数据为{2,4,6,8,10,12,14,16}的vector<double>* Jill_data时。

说到图片中的运算符优先级,正如FedeWar所提到的,以下C++风格的伪代码可能会让它更清晰:

double h1 = Jill_data . DeferenceThePointer . Access_Index_5;
double h2 = Jill_data . Access_Index_5 . DeferenceThePointer;

在第一种情况下,Jill_data将被取消引用(指针间接),这将起作用,因为Jill_data是一个指针。它给出了一个vector对象。然后它访问索引,该索引调用vector::operator[],这是一个有效的操作。您得到一个double值。

在第二种情况下,您正在访问Jill_data的第六个元素([5]),它是有效的,它给出了vector。然后,您尝试在向量上调用operator*,而vector类并没有实现它,因此您会得到"无效间接寻址"或类似的错误。无论如何都不能将其分配给double

1)指针Jill_data将被取消引用,然后使用[5]:12访问第五个元素。

2) 不会编译。

第二个不会编译,运算符[]的优先级高于*。您不能以应该使用->operator[]的方式访问方法,而且也不能取消引用双数。