1
#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。这只是句法差异还是这两种方法有任何功能差异?

4

2 回答 2

1

基本上是一样的。但是,解引用运算符 ( *) 和指针访问运算符 ( ->) 都可以为类类型重载,因此可以为它们中的每一个提供不同的行为。但是,这是一个非常特殊的情况,而不是您的示例中的情况。

于 2010-06-04T05:25:01.987 回答
1

这只是一个语法差异,差异的原因可以在这里找到

因为通过指针访问结构和类成员的语法很笨拙,所以 C++ 提供了第二个成员选择运算符 (->) 用于从指针中进行成员选择。因此,两条线是等价的。-> 运算符不仅更易于键入,而且更不容易出错,因为无需担心优先级问题。因此,当通过指针进行成员访问时,始终使用 -> 运算符。

于 2010-06-04T05:27:09.137 回答