2016-10-19 17 views
1

のですか?どちらがより良い、自動&&、自動または自動のconst

スタイル1:

for(auto v : value){ 
    //do something 
} 

スタイル2:

for(auto &&v : value){ 
    //do something 
} 

スタイル3:

for(auto const v : value){ 
    //do something 
} 

それらのすべては、タイプのconst性を保ちます。

スタイル2は最も一般的なソリューションです。

私が知っているところによると、int、doubleなどのプリミティブ型の場合、値渡しはconst参照渡しよりも優先されるので、スタイル1とスタイル3は、プリミティブ型です。この質問が馬鹿げていると私を許してください。

+1

どのようにすればよいですか? –

+0

'for(auto const v:value){'は(const auto&v:value){'を意味しましたか? const値は意味がないようです。 –

答えて

4

これは実際にあなたのニーズと反復処理の対象によって異なります。

スタイル1と3が要素のコピーを作成します。つまり、元のコンテナを変更することはできません。小さなタイプの場合は、パフォーマンス(ターゲットアーキテクチャ上で自分自身をベンチマークする)の面で有益かもしれませんが、通常は悪いデフォルトです。

あなたはのデフォルトであるかどうかを判断する必要があります。人。はいの場合、スタイル3を取る。


スタイル2は実際には最も一般的ですが、必ずしも良い方法ではありません。あなたがさらに要素から移動したい場合を除き、すなわち、その場で生成されたシーケンスに非const参照を取るにはほとんどポイントをあります:

for(auto&& x : std::vector<int>{1,2,3}) 
{ 
    // x = 42; ??? 
} 

あなたはC++コアガイドラインherehereを見ればauto&&の例は表示されず、デフォルトで変数を変更しない限りconst&と表示されます。それは私が固執するものです。