2011-11-09 8 views
1

私はIOオブジェクトのコピーや割り当てを理解していないので、istream/ostreamオブジェクトには参照記号&が必要です。しかし、なぜifstream/ofstreamまたはistringstream/ostringstreamにオブジェクトを初期化するのに&を必要としないのですか? 。"istream&object"には&とifstreamが必要ですか?

istream& input=cin; 
ifstream infile; 
infile("in"); 

はistreamは&必要とはifstreamは、変数を宣言する&を必要としません。

+1

変数宣言を意味しますか?あなたが話している場所を正確に示すためのコードを投稿できますか? – user7116

+0

はい、変数宣言です。 "istream&input = cin;"一方、 "ifstream infile; infile(" in ");"なぜ "&"が必要なのか?他の宣言はしないのですか? – ihm

+0

本当に質問がここにあるのかよくわかりません。 – Puppy

答えて

1

これら2つはではありません。実際にはに相当します。 1つは初期化子を持ち、もう1つは初期化子を持たない。

ただし、std::istream input = cinストリームはコピーできないため動作しません。 を既存のifstreamで初期化しようとすると、同じエラーが発生します。明らかに、参照はコピーを伴わないので、既存の値のエイリアシングを行います。

逆の場合は、イニシャライザを省略した場合、にはに参照がありません。参照にはイニシャライザが必要です。代わりに、あなたのストリームは単にデフォルトの構造になります。

+0

を忘れてしまった。どうもありがとう。 – ihm

関連する問題