【发布时间】:2010-10-05 15:31:06
【问题描述】:
程序员在访问对象成员时必须区分. 和-> 的真正原因是什么?
void foo( Point &p ) {
p.x ;
p->y; // syntax error
}
void foo( Point *p ) {
p.x ; // syntax error
p->y;
}
我的意思是,不管怎样,它们都指向一个对象,p。
为什么我每次都要检查 p 是什么?编译器不能理解吗?
为什么他们不允许它同时接受
.语法?这对于堆栈对象也可以。
如果是因为 C 传统,
- 为什么不允许
.和->访问器?
15 年来,我一直谦虚地认为编译器错误是我的错!
【问题讨论】:
-
stackoverflow.com/questions/1813865/… 的可能重复项。虽然这涉及 C,但许多答案都涉及 C++ 问题。
-
就是这样。习惯它或使用不同的语言。除非 Kernighan 或 Ritchie 已经开始在 StackOverflow 上发帖,否则您不太可能得到好的答案。
-
我明白你的意思,但我认为“编译器错误是我的错”的想法有点忽略了这一点。 错误本身是一件好事, 当您将错误与无提示编译失败进行比较时,这一点很明显。令人讨厌的不是错误消息,而是无法接受和编译此代码。对?小点,但我希望它澄清了这个问题:为什么编译器(相当于:C++ 语言规范)不允许这个表达式?这就是您在要点中所说的。