c++ 为什么我应该使用'->'而不是','在对象的指针中?[副本]

ggazkfy8  于 2023-05-02  发布在  其他
关注(0)|答案(2)|浏览(163)

此问题已在此处有答案

Why does the arrow (->) operator in C exist?(4个答案)
6天前关闭。
社区昨天审查了是否重新打开这个问题,并将其关闭:
原始关闭原因未解决
我同意这可能是一个非常初学者的问题,但我不知道为什么我不能使用'。'来访问指向对象的指针的成员。
例如

JMP *sum_obj = new JMP("0");
JMP a;
sum_obj->number;
a.number;

sum_obj.number; // error: request for member ‘number’ in ‘sum_obj’, which is of pointer type ‘JMP*’ (maybe you meant to use ‘->’ ?)

在这里,为什么要使用->作为sum_objnumber成员?

zy1mlcev

zy1mlcev1#

在C中,没有技术原因。一个非技术性的原因是清晰性--如果你看到一个->,你知道它是一个指针,可能是null,所以你可能需要在解引用它之前检查null。
在C++中,有一些类在某种程度上假装是指针(std::unique_ptrstd::shared_ptrstd::optional)。它们像指针一样支持*->,但它们也有自己的成员函数,可以通过.访问。以这种方式分隔符号可以避免任何可能的成员名称冲突,同时也增加了清晰度。

9jyewag0

9jyewag02#

箭头操作符->用于访问指针所指向的对象的成员变量或成员函数。箭头操作符与指针一起使用,因为当我们使用点操作符.访问成员变量或函数时,编译器会假设我们访问的是对象的成员,而不是对象的指针。

相关问题