2017-06-13 3 views
0

私は最近、入力チェックループの有効性条件を処理するためにフラグを使用し始めました。そのため、同じチェックを何度もやり直さなくてもループ内のどこかでチェックすることができます。しかし、私はどのようにフラグを割り当てるのが最善かわかりません。これに関する、または単に個人的なスタイルに関する一般的な標準の練習はありますか?コンパイルされたコードには何がありますか?if-checkとinlineの条件付きコンパイラに違いはありますか?

bool isValidSize; 

do { 
    std::cout << "Enter the font size (8-12): "; 
    std::cin >> fontSize; 

    if (fontSize >= MIN_FONT_SIZE && fontSize <= MAX_FONT_SIZE) { 
     isValidSize = true; 
    } else { 
     isValidSize = false; 
     std::cout << "Invalid size. "; 
    } 
} while (!isValidSize); 

if文が一目でに設定されているものをisValidSizeそれがより明確にするために変更することができます:たとえば、代わりに次のコードの

isValidSize = (fontSize >= MIN_FONT_SIZE && fontSize <= MAX_FONT_SIZE); 
    if (!isValidSize) { 
     std::cout << "Invalid size. "; 
    } 

でしょう。この特別なチェックとしてコンパイルされますか?割り当てを別のものと区別することには、移植性のメリットはありますか?コードを見るだけで、最初の方法のメリットはおそらく1つのブランチであると思われますが、担当者ごとに追加の割り当てがあり、elseもありますか?

+1

さまざまな最適化オプションで生成されるコンパイラをhttps://godbolt.org/で簡単に確認できます。しかし、どのような場合でも、最適化を試みる前に、コードをベンチマーク/プロファイリングして、それが重要かどうかを確認してください。そうでない場合は、常に最も明確なバージョンを記述してください。 –

+1

この種のマイクロ最適化は、ほとんど常に愚かです。読者に最も合った方法で書く。コンパイラにその仕事をさせてください。 Gccはこのようなケースを最適化するのに非常に優れています。好奇心が強い人は、アセンブリにコンパイルする方法(簡単に)を学び、自分のために何が起こるかを見ていくことは価値のあるスキルです(少し難しい)。そして、同じコンパイラのバージョンを含めて、2つのコンパイラが似ていることは分かりません。 @JesperJuhlはgodbolt.orgについて正しいです。とても良いですね。 – Gene

+0

インタラクティブな入力ループでナノ秒を心配する必要はありません。一番読みやすいものを使用してください。 – molbdnilo

答えて

1

違いはありません:proof

GCC 6.3でテストしました(-O3)。

あなたが読んだほうがいいと思います。

+0

ありがとう!それらのうちの1つは、一般的な練習としての読みやすさに関してはより標準的ですか、それとも実際にはまったく問題ではありませんか? – BrainFRZ

+0

@BrainFRZその場合、それは本当に依存しています。とにかくIMHO私は2番目のスニペットを好む。私はそれがより読みやすいと思う。 –

関連する問題