将对象视为指针或指针之间的区别
Difference between treating the object as such or as pointer?
假设我有一个对象/指针/不管这种东西的定义是什么:
A* a = new A();
谁碰巧有方法
b();
c();
我发现的做事方式是:
a->b();
这种方法效果很好。然而,现在我看到人们这样做:
(*a).b();
问题是:这两种调用方法的方式之间有什么区别(即如何分别管理地址和值)?根据这两种方法,哪种方法最好?
如果这是其他问题的副本,请告诉我,我会在看到原始问题后删除它。
没有区别。这只是一个不同的符号。
对于指针,没有区别:
如果您申报:
A* pointer_to_A = new A();
那么这两者在定义上是等价的:
pointer_to_A->b();
(*pointer_to_A).b();
然而,如果您在对象上声明:
A a;
那么这两者并不一定等同:
a->b();
(*a).b();
在这种情况下,第一行调用A::operator->()
,而第二行调用A::operator*()
。(此外:这种情况有些罕见。它最常用于行为类似指针的对象:迭代器、智能点等。如果它们设计良好,那么上面的两种形式仍然相同。)
没有区别。更喜欢->
,因为它更干净,能更好地说明你的意思。
但是,->
和*
可能过载。因此,对于某些类,它们可能会做不同的事情,尽管这是非常非常罕见的,对于指针来说也是不可能的。
->
表示法是语法糖。
相关文章:
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- AVX 指令中寄存器和指针之间的客观差异
- 为什么不同类型层次结构的指针之间的dynamic_cast定义得很好?
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 类指针之间的 Qt 差异
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- 按值和引用传递指针之间的区别?
- 可以在指向不同模板类实例的指针之间进行强制转换吗
- 函数指针和传递指针之间的区别
- 作为 int 传递和类内部指针之间的差异给我带来了分段错误
- 比较C 中移动和智能指针之间的习惯
- 无效指针和非初始化的指针之间的差异
- 拉链比较整数和指针之间
- 指针数组(*a)[]和双指针** a之间的差异
- ->运算符和指针 * 之间的区别 (C++)
- 在 c++ 中,指向 int 的指针和指向指向 int 的指针之间的区别是什么?
- 指针之间的强制转换运算符
- 函数对象和函数指针之间的差异
- 指针之间的运算符重载
- 两个指针之间的差异是合法的 c++17 常量表达式