入力を受け付けたとき、私は(myDetailsが構造体である)、これが書かれて見てきました:CINと方法書
cout << "Enter your weight: ";
(cin >> myDetails.weight).get();
私の問題は、私はそれを理解していないということです。どのように文全体がオブジェクトのようになり、get()?というメソッドを持つことができますか? cinはget()というメソッドを持っていることが分かりますが、cinの作成中の大括弧は何ですか?
入力を受け付けたとき、私は(myDetailsが構造体である)、これが書かれて見てきました:CINと方法書
cout << "Enter your weight: ";
(cin >> myDetails.weight).get();
私の問題は、私はそれを理解していないということです。どのように文全体がオブジェクトのようになり、get()?というメソッドを持つことができますか? cinはget()というメソッドを持っていることが分かりますが、cinの作成中の大括弧は何ですか?
ここの演算子>>は、std :: cinへの参照を返しますので、get()を呼び出すことになります。あなたがmyDetails.weightのget()を呼び出そうとしないように、大括弧が必要です。
より一般的には、ストリーム抽出演算子は通常、このような署名を持っている:チェーンをサポートするように
std::istream& operator>>(std::istream& is, thing& rhs);
そして、彼らは彼らの最初の引数を返します。これは、>>が左結合であるという事実と組み合わせて、例えば、
全体文はオブジェクトのようになるとのget(というメソッドを持つことができますどのようにoperator>>(operator>>(std::cin, a), b);
説明のために大変ありがとうございました – Dan
):同等です
std::cin >> a >> b;
?
これは単なるステートメントではないためです。それは表現です。それ自体で、またはより広いフル発現の一部として使用されるかどうかを表現cin >> x
は、istream&
に評価することを意味し、istream
戻りistream&
ためoperator>>
を過負荷(具体的には、cin
参照そのもの)。作品を連鎖方法です
は:(cin >> x)
はcin
と評価されたときにのみ動作することを確認できるようにcin >> x >> y
は、(cin >> x) >> y
と同じです。あなたの例はまったく同じです。メンバoperator>>
ではなく、メンバー.get()
を呼び出すという違いがあります。
ああ、それをクリアしてくれてありがとう。すべて今、意味があります。 – Dan
あなたの投稿に署名しないでください。 –
よろしくお願いします。メッセージに個人的な感覚を加えていただけです。 – Dan
時間と場所: –