1

最近、私は Web プログラミングだけを使用した後で C++ を学んでいます。これまでのところ、cplusplus のチュートリアルではうまく機能しています。私が頭を悩ませていることの 1 つは、データ構造内のオブジェクトを参照するポインターの使用です。基本的:

string mystr;
movies_t amovie;    // create new object amovie from structure movies_t
movies_t* pmovie;   // create a new pointer with type movies_t
pmovie = &amovie;   // reference address of new object into pointer

cout << "Enter movie title: ";
getline(cin, pmovie->title);
cout << "Enter year: ";

getline (cin, mystr);

(stringstream) mystr >> pmovie->year;

cout << endl << "You have entered:" << endl;
cout << pmovie->title;
cout << " (" << pmovie->year << ")" << endl;

次のように簡単に記述できます。

string mystr;
movies_t amovie;

cout << "Enter movie title: ";
getline(cin, amovie.title);
cout << "Enter year: ";
getline(cin, mystr);

(stringstream) mystr >> amovie.year;

cout << endl << "You have entered:" << endl;
cout << amovie.title;
cout << " (" << amovie.year << ")" << endl;

配列での使用は理解していますが、構造体から値自体を参照するよりもポインターを使用する方が望ましい理由を理解するのに苦労しています。

4

1 に答える 1

2

配列での使用は理解していますが、構造体から値自体を参照するよりもポインターを使用する方が望ましい理由を理解するのに苦労しています。

そうではありません。ポインタは、何らかの理由で変数を直接参照できない場合にのみ使用してください (たとえば、参照する値が変更される可能性があるため)。

それとは別に、ここでの C スタイルのキャストの使用は確かに創造的です。しかし、これをしないでください。C スタイルのキャストは、一般に C++ では受け入れられません。ここで使用しstatic_castます:

static_cast<stringstream>(mystr) >> amovie.year;

または、少なくとも関数スタイルのキャストを使用します。

stringstream(mystr) >> amovie.year;

…しかし、実際にはコード行全体 ( の宣言を含むmystr) はまったく役に立ちません。値を直接読み取るだけです。

cout << "Enter year: ";
cin >> amovie.year;
于 2013-09-14T12:07:29.703 に答える