首页 > 解决方案 > C++ 取消引用和使用点运算符与使用箭头运算符有区别吗

问题描述

假设我有以下变量:

MyObject* obj = ...;

如果此对象具有字段foo,则有两种访问方式:

  1. obj->foo
  2. (*obj).foo

使用一种方法与另一种方法有什么区别。还是第一种方法只是第二种方法的语法糖?

我在想也许第一个可能会导致对象的复制构造函数被调用,因为它现在持有该值。

标签: c++dereference

解决方案


obj什么时候是指针没有区别。

如果obj是某个类的对象,obj->foo将调用operator->()并将(*obj).foo调用operator*(). 理论上,您可以重载这些以执行完全不同的行为,但这将是一个设计非常糟糕的类。


推荐阅读