c++ - 为什么要写 -> 而不是 .?

标签 c++ pointers syntax

<分区>

Possible Duplicate:
Why does C have a distinction between -> and . ?

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

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

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

我的意思是,不管怎样,它们都引用一个对象,p

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

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

如果是由于 C 传统,

  • 为什么他们不允许同时使用 .-> 访问器?

15 年来,我一直谦虚地认为编译器错误是我的错!

最佳答案

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

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

关于c++ - 为什么要写 -> 而不是 .?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865206/

相关文章:

c++ - 不从文件中读取数据

c++ - 将整数数组复制到另一个数组时代码崩溃(使用整数指针)

c - 交错开关上的模糊 C 构造

C++ 从函数到 Main 调用 vector

c++ - 在C++中获取结构的参数名称

c++ - 在 specyfing 命名空间之后通过指针内联声明对象

c++ - 指针稳定吗?

sql - SELECT Column_Name Column_Name from Table_Name(无逗号)

c++ - __declspec(align) 用于多个声明

c++ - 当重载为类的成员函数时,取消引用运算符 (*) 是如何工作的?