2016-03-27 10 views
3

何はstd ::ベクトルは::()が呼び出され始めるが、返されたイテレータを基準に割り当てられている場合はどうなりますか?なぜ動作し、反復子の値はどこに格納されていますか?オートリファレンスとイテレータ

std::vector<int> v; 
auto a = v.begin(); //I assume iterator is stored on the stack in variable "a". 
auto& b = v.begin(); //What happens here? 
+0

なぜ試してみませんか?あなたが自動&& B –

+0

を(コンパイラはあなたに叫ぶ必要があります)。 –

答えて

7

このライン

auto& b = v.begin(); 

は、エラーです。

+1

を書いたかのように++はCにあるため、その危険な「拡張子」のマイクロソフトのコンパイラでコンパイル可能性がある、それを処理し、喜んでエラーを受け入れるDieterLückingMicrosoftのコンパイラ@ –

+0

@RichardHodges:良い点。私は言葉を "コンパイルエラー"から "エラー"に変更しました。 –

+0

はい、Microsoftコンパイラで動作し、正しい行と同じアセンブリコードを作成します。混乱する。私はコンパイラエラーを優先していたでしょう。 – Tom

4

ここではありません。あなたは、ぶら下がっている参照があります。これをしないでください。 Visual Studioの特定のバージョンは、あなたがconst auto&と程度の一時的な生涯を書いたことをふりますけれども

ほとんどのコンパイラは、これを拒否します。その一時的な情報が保存される場所は無関係です。 v.begin()が一時的に戻って、あなたは非const参照に一時的にバインドすることはできませんので

関連する問題