Синтаксис доступа к элементу для указателя на структуру - PullRequest
1 голос
/ 04 июня 2010
#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. Это только синтаксическая разница или есть функциональная разница в этих двух подходах?

Ответы [ 2 ]

1 голос
/ 04 июня 2010

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

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

1 голос
/ 04 июня 2010

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

...