在 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
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