Можно создать дубликат:
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? Не может понять компилятор?
Почему они не позволили ему принять
.
синтаксис для обоих? Это было бы хорошо для объектов стека тоже.
И если это связано с C-традиции,
- Почему они не позволяют одновременно
.
и->
аксессоров?
Более 15 лет я всегда смиренно рассматривал ошибки компилятора как свою ошибку!
Возможный дубликат http://stackoverflow.com/questions/1813865/why-does-c-have-a-distinction-between-and/1813883#1813883. Хотя это касается C, многие ответы касаются проблем C++. –
Это то, что есть. Привыкайте к нему или используйте другой язык. Если Kernighan или Ritchie не начали публиковать сообщения в StackOverflow, вы вряд ли получите хороший ответ. –
Я вижу вашу точку зрения, но я думаю, что идея «ошибки компилятора, являющаяся моей ошибкой», немного упущена. * Ошибки сами по себе - это хорошо, что очевидно, когда вы сравниваете ошибки с молчаливым сбоем компиляции. Это не сообщения об ошибках, но неспособность принять и скомпилировать этот код, который раздражает. Правильно? Небольшая точка, но я надеюсь, что это прояснит вопрос: почему компилятор (эквивалент: спецификация языка C++) не позволяет это выражение? Это то, что вы сказали в своих пунктах. – LarsH