#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
. Это - просто синтаксическое различие или является там каким-либо функциональным различием, доступным в этих двух подходах?
Это просто синтаксическая разница, а причину разницы можно найти здесь
Поскольку синтаксис для доступа к структурам и членам класса через указатель неудобен, C++ предлагает второй оператор выбора члена (->) для выбора члена из указателей. Следовательно, обе строки эквивалентны. Оператор -> не только легче вводить, но и гораздо меньше подвержен ошибкам, поскольку не нужно беспокоиться о вопросах старшинства. Следовательно, при доступе к члену через указатель всегда используйте оператор ->.
В основном то же самое. Однако как оператор разыменования ( *
), так и оператор доступа к указателю ( ->
) могут быть перегружены для типов классов, поэтому для каждого из них можно задать разное поведение. Однако это очень особый случай, и не в вашем образце.