Что я могу использовать вместо оператора стрелки, '->'?

103
задан Mateen Ulhaq 7 January 2012 в 20:49
поделиться

4 ответа

Следующие два выражения эквивалентны:

a->b

(*a).b

(подвергающийся перегрузке оператора, как Konrad упоминает, но это необычно).

133
ответ дан Greg Hewgill 24 November 2019 в 04:15
поделиться

a->b обычно синоним для (*a).b. Круглые скобки здесь необходимы из-за обязательной силы операторов * и .: *a.b не работал бы, потому что . связывает более сильный и выполняется сначала. Это таким образом эквивалентно *(a.b).

Остерегаются перегрузки, хотя: С тех пор и -> и * может быть перегружен, их значение может отличаться решительно.

68
ответ дан Konrad Rudolph 24 November 2019 в 04:15
поделиться

C ++-language определяет оператор (->) стрелки как синоним для разыменования указателя, и затем используйте . - оператор на том адресе.

, Например:

, Если у Вас есть объект, anObject, и указатель, aPointer:

SomeClass anObject = new SomeClass();
SomeClass *aPointer = &anObject;

, Чтобы быть в состоянии использовать один из методов объектов Вы разыменовываете указатель и делаете вызов метода на том адресе:

(*aPointer).method();

, Который мог быть записан с оператором стрелки:

aPointer->method();

главная причина existents оператора стрелки состоит в том, что это сокращает ввод очень общей задачи, и это также довольно легкий к забыло круглые скобки вокруг разыменования указателя. Если Вы забыли круглые скобки, с. операторами свяжет более сильный тогда *-operator и заставит наш пример выполниться как:

*(aPointer.method()); // Not our intention!

Часть другого ответа имеет также упоминание и что операторы C++ могут быть перегрузкой и что не то, чтобы распространенный.

44
ответ дан MultiColourPixel 24 November 2019 в 04:15
поделиться

Я главным образом считал его справа налево, и вызов "в"

foo->bar->baz = qux->croak

становится:

"baz в панели в нечто становится карканьем в qux".

13
ответ дан Lazer 24 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: