为什么C++使用DOT访问结构成员和 - >访问方法?

Com*_*sNo 1 c++

我来自Delphi/Pascal编程世界,但我偶尔也会用C++或C"玩",有一个让我困扰的问题:为什么C++使用"." 访问结构成员和" - >"访问方法?在Delphi/Pascal中我们使用"." 对于任何这些甚至属性......

有人告诉我它与C++如何访问内存有关,但这个答案还不足以帮助我理解.

谢谢.

Kar*_*tel 9

你的理解是不正确的.C++以相同的方式访问数据成员和成员函数(术语"方法"不被C++程序员使用).

.访问对象的成员.->访问指向对象指向的对象的成员.foo->bar完全等同于(*foo).bar.

这就是为什么有人告诉你"它与C++如何访问内存有关" - 因为它确实如此.


gre*_*ade 5

你让他们感到困惑。

foo->bar()在语义上等同于(*foo).bar()(除非运算符重载。)

->当左侧参数是指针时使用。

.当它是引用或不是指针时使用。

它与右侧没有任何关系。


mvl*_*dic 5

所有结构成员(字段和方法)都以相同的方式访问.但是,在指向结构的情况下,有两种不同的语法用于相同的目的:(*pStruct).member和pStruct-> member.

在Pascal(或Delphi)中:

var pointerToSomeRecord: ^SomeRecord;

pointerToSomeRecord^.field := 42;
Run Code Online (Sandbox Code Playgroud)

在C++中:

SomeStruct* pointerToSomeStruct;

(*pointerToSomeStruct).field = 42;
Run Code Online (Sandbox Code Playgroud)

但是,在C++中还有另一种方式:

pointerToSomeStruct->field = 42;
Run Code Online (Sandbox Code Playgroud)

大多数C++程序员喜欢后者形成更多.