Членские синтаксисы доступа для указателя на структуру

#include <iostream>

typedef struct _person
{
    std::string name;
    unsigned int age;
}Person;

int main()
{
    Person *pMe = new Person;
    pMe->age = 10;
    pMe->name = "Larson";

    std::cout << "Me " << (*pMe).age << " " << (*pMe).name.c_str() << std::endl;

    return 0;
}

Рассмотрите вышеупомянутый код. На членов структур можно сослаться двумя способами. Например, pMe->age или (*pMe).age. Это - просто синтаксическое различие или является там каким-либо функциональным различием, доступным в этих двух подходах?

1
задан bdhar 4 June 2010 в 05:20
поделиться

2 ответа

Это просто синтаксическая разница, а причину разницы можно найти здесь

Поскольку синтаксис для доступа к структурам и членам класса через указатель неудобен, C++ предлагает второй оператор выбора члена (->) для выбора члена из указателей. Следовательно, обе строки эквивалентны. Оператор -> не только легче вводить, но и гораздо меньше подвержен ошибкам, поскольку не нужно беспокоиться о вопросах старшинства. Следовательно, при доступе к члену через указатель всегда используйте оператор ->.

1
ответ дан 3 September 2019 в 00:04
поделиться

В основном то же самое. Однако как оператор разыменования ( * ), так и оператор доступа к указателю ( -> ) могут быть перегружены для типов классов, поэтому для каждого из них можно задать разное поведение. Однако это очень особый случай, и не в вашем образце.

1
ответ дан 3 September 2019 в 00:04
поделиться