我来自Delphi/Pascal编程世界,但我偶尔也会用C++或C"玩",有一个让我困扰的问题:为什么C++使用"." 访问结构成员和" - >"访问方法?在Delphi/Pascal中我们使用"." 对于任何这些甚至属性......
有人告诉我它与C++如何访问内存有关,但这个答案还不足以帮助我理解.
谢谢.
你的理解是不正确的.C++以相同的方式访问数据成员和成员函数(术语"方法"不被C++程序员使用).
.访问对象的成员.->访问指向对象指向的对象的成员.foo->bar完全等同于(*foo).bar.
这就是为什么有人告诉你"它与C++如何访问内存有关" - 因为它确实如此.
你让他们感到困惑。
foo->bar()在语义上等同于(*foo).bar()(除非运算符重载。)
->当左侧参数是指针时使用。
.当它是引用或不是指针时使用。
它与右侧没有任何关系。
所有结构成员(字段和方法)都以相同的方式访问.但是,在指向结构的情况下,有两种不同的语法用于相同的目的:(*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++程序员喜欢后者形成更多.