为什么要费心去写 - >而不是.?

Gri*_*ngo 2 c++ syntax pointers

可能重复:
为什么C区分 - >和.?

程序员必须区分.->访问对象成员时的真正原因是什么?

void foo( Point &p ) {
    p.x ;
    p->y; // syntax error
} 

void foo( Point *p ) {
    p.x ; // syntax error
    p->y;
} 
Run Code Online (Sandbox Code Playgroud)

我的意思是,无论如何,他们都指的是一个物体,p.

  • 为什么我每次都要检查p是什么?编译器能不能理解?

  • 为什么他们不允许它接受.两者的语法?这也适用于堆栈对象.

如果是由于C传统,

  • 为什么他们不允许这两个.->访问者?

超过15年,我一直谦卑地认为编译错误是我的错!

CMi*_*cea 8

因为p->d实际意味着(*p).d.它进行解除引用,然后进行成员访问.引用的行为类似于对象,因此它们不需要解除引用(它们也是C++特性,而指针是从C继承的); 它一直保持这种向后兼容性.

C++充满了这样的不一致,但通常没有更好的选择来添加新功能保持旧代码的正常运行.重写旧代码不是一种选择.


Ara*_*raK 6

因为你可能有一个智能指针.在这种情况下,您可以使用智能指针的成员.和使用真实对象的成员->.

  • 不是相反 - 智能指针利用此功能而不是功能存在,以便智能指针可以存在... (8认同)
  • 它可能都是.在智能指针之类的东西之前,C显然区分了`.`和` - >`.但是C++*原则上可以选择将它们合并为OP建议的,允许你使用任何一种语法.但是,实现智能指针是不可能的 (2认同)