c++ - C++ 取消引用和使用点运算符与使用箭头运算符有区别吗
问题描述
假设我有以下变量:
MyObject* obj = ...;
如果此对象具有字段foo
,则有两种访问方式:
obj->foo
(*obj).foo
使用一种方法与另一种方法有什么区别。还是第一种方法只是第二种方法的语法糖?
我在想也许第一个可能会导致对象的复制构造函数被调用,因为它现在持有该值。
解决方案
obj
什么时候是指针没有区别。
如果obj
是某个类的对象,obj->foo
将调用operator->()
并将(*obj).foo
调用operator*()
. 理论上,您可以重载这些以执行完全不同的行为,但这将是一个设计非常糟糕的类。
推荐阅读
- sorting - 为什么快速排序 O(n)?
- docker - Docker - 您可以在集群中的节点上创建容器而不是服务吗?
- python - 未添加 Python 变量值
- swiftui - 在 SwiftUI 中使用 ScrollViewReader 如何突出显示我滚动到的行?
- git - 如何为这个特定场景设置 git?
- powerbi - 如何在记分卡/文本框 POWER BI 中始终将比率显示为百分比
- javascript - 如何从组件的操作中动态改变 Storybook v6 中的“args”?
- python - 转换为 libsvm 时保留 Spark Dataframe 的顺序
- nlp - 如何使用动词时态/情绪制作一个 spacy 匹配器模式?
- apache-flink - 连接的键控流上的 coProcessFunction 与 keyedCoProcessFunction