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

Using the dereference operator in C++ vectors

1) 和 2) 的区别是什么,它们的值是什么:

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

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

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

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

2) 不会编译。

说到图片中的运算符优先级,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 的第 6 个元素 ([5]),这是有效的,它给出 vector。然后你尝试在 vector 上调用 operator*vector class 没有实现它,因此你会得到 "Invalid indirection" 或类似的错误。这无论如何都不能分配给 double