动态分配数组的元素在第一个元素后不使用 ->运算符?
Elements of dynamically allocated array don't use -> operator after first element?
我正在阅读一篇关于C++的教程,该教程演示了如何使用下标语法从数组的元素调用对象的公共方法。它是这样的:
Foo* array = new Foo[2];
array->public_function();
array[1].public_function();
现在我了解了变量array
指向数组的第一个元素,因此使用->
运算符访问该元素的公共数据和函数。我的问题是,为什么对array[1]
的调用会有任何不同——为什么它会使用.
语法而不是->
语法?数组的所有元素不是都是指针吗?
使用索引[]
后,将获得对象,而不是指向对象的指针。
考虑以下示例,该示例通过使用指针算术直接处理指针。
Foo* array = new Foo[2];
// Following four are equivalent.
array[0].public_function();
array->public_function();
(array + 0)->public_function();
(&array[0])->public_function();
// Following three are equivalent.
array[1].public_function();
(array + 1)->public_function();
(&array[1])->public_function();
您可以将其视为[]
运算符返回对Foo
的引用,因此您可以使用.
运算符来访问其成员。
array->public_function()
与(*array).public_function()
相同,后者与array[0].public_function()
相同。您正在通过指向Foo
对象实例的原始指针访问public_function()
。编译器不知道指针实际上是Foo
实例的数组。正如您所说,array
只是指向数组中第一个元素的指针。以上所有语法在任何对象指针上都有效。由于您处理的是数组,因此应坚持使用array[0].public_function()
语法以确保一致性和可读性。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素