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;
}

上記のコードを検討してください。構造体のメンバーは、2つの方法で参照できます。例:、pMe->ageまたは(*pMe).age。これは単なる構文上の違いですか、それともこれら2つのアプローチで利用できる機能上の違いはありますか?

4

2 に答える 2

1

基本的には同じです。ただし、間接参照演算子(*)とポインターアクセス演算子(->)の両方がクラス型に対してオーバーロードされる可能性があるため、それぞれに異なる動作を提供することができます。ただし、これは非常に特殊なケースであり、サンプルのケースではありません。

于 2010-06-04T05:25:01.987 に答える
1

これは構文上の違いであり、違いの理由はここにあります

ポインターを介して構造体およびクラスメンバーにアクセスするための構文は扱いにくいため、C ++は、ポインターからメンバーを選択するための2番目のメンバー選択演算子(->)を提供します。したがって、両方の行は同等です。->演算子は、入力が簡単であるだけでなく、優先順位の問題がないため、エラーが発生しにくくなります。したがって、ポインタを介してメンバーアクセスを行う場合は、常に->演算子を使用してください。

于 2010-06-04T05:27:09.137 に答える