在C++向量中使用解引用运算符
Using the dereference operator in C++ vectors
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[]
的方式访问方法,而且也不能取消引用双数。
相关文章:
- 取消引用运算符不能重载
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 为什么在函数名称中使用取消引用" * "运算符?
- C++:类类型引用运算符=用法
- 为什么通过通用引用运算符 (&&) 将变量的引用传递给 Varadic 模板函数失败?
- 当取消引用运算符 (*) 重载时,*this 的使用是否受到影响?
- 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级
- 赋值不起作用,但带有取消引用运算符的地址起作用?
- 关于解引用运算符是否在表达式中产生对象对值的定义不明确
- 如何重载箭头取消引用运算符->() 不是针对实体对象,而是针对指针
- (取消)引用运算符的评估
- 重载取消引用运算符(运算符*())
- 如何重载取消引用运算符
- 结构引用和取消引用运算符
- 输入迭代器必须具有常量解引用运算符吗
- 对 std::atomic::load 的结果使用结构取消引用 (->) 运算符是否安全
- C++使用引用运算符传递数组
- 使用引用和取消引用运算符读取代码行时遇到问题
- 在C++向量中使用解引用运算符
- 是否可以根据基于的范围类型调用不同的取消引用运算符重载