【发布时间】:2020-10-08 03:50:10
【问题描述】:
我对此感到好奇已经有一段时间了。假设我们有以下情况来访问存储在动态分配的内存中的类的数据成员:
class C {
public :
C() = default;
int a = 4;
}
int main () {
C * ptr = new C();
std::cout << "pointer->::" << ptr->a << std::endl;
std::cout << "dereference*().::" << (*ptr).a << std::endl;
}
我确定指针方法是首选方法,我的猜测是取消引用指针提供了一个引用,至少在 C++ 中是这样。但是在没有引用的C语言中(并假设适当的修改将类转换为结构等),像这样取消引用和访问成员会导致临时浅拷贝吗?这是编译器优化出来的东西吗?
【问题讨论】:
-
不涉及复制。 取消引用 C 中的指针works the same:“结果是一个左值表达式,它指定了指向的对象。”。
ptr->a和(*ptr).a这两种形式是完全等价的。
标签: c++