4 Matching Annotations
  1. Dec 2021
    1. それ以外の用途において、bits/stdc++.hを用いることは避けるべきだと考えます。これには以下のような理由が考えられます。 libstdc++環境固有のヘッダであり、これを用いることはプログラムの可搬性を大きく損なうため ヘッダのプリコンパイルによるコンパイル高速化を行わない場合、stdc++.hのインクルードは本来の使用目的から外れ、コンパイル時間を増大させる可能性があるため コンパイル後のバイナリに不必要な未使用定数などが含まれ、サイズが増大するため 不必要なヘッダをインクルードすることによってIntellisenseなどIDEの動作を重くする可能性があるため ファイル中で標準ライブラリのどの機能を使用しているかがわかりにくくなり、プログラム全体の見通しが悪くなるため

      [[bits/stdc++.hは環境依存であり、開発用途で使うべきではない]]

    2. 最も致命的なのは、bits/stdc++.hを使うことによって得られる利点が「プログラムが短くなる」という点しか見当たらないことです。私は一般に、「プログラムが短くなる」とか「きれいに見えるようになる」などの理由でプログラムの動作に対する本質的な変更を加えることはバッドプラクティスであると考えます (もちろん、例外もあります)。

      [[bits/stdc++.hは環境依存であり、開発用途で使うべきではない]]

    3. でも環境依存って聞いたよ? bits/stdc++.hはlibstdc++固有の機能であり、Clangや CL.exe (VC++) のような他のコンパイラの標準ライブラリには同様のファイルは存在しません。 よって仮想Linux環境なしのWindowsや、自分のことをGCCだと思っている精神異常ClangがインストールされているMacでは通常このテクニックを使用することはできません。

      [[bits/stdc++.hは環境依存であり、開発用途で使うべきではない]]

    4. そもそも、bits/stdc++.hって何? GNUが開発するC++の標準ライブラリの実装であるlibstdc++のプリコンパイル済みヘッダを生成するためのソースファイルです。 具体的な中身はgccのソースリポジトリのlibstdc++-v3/include/precompiled/stdc++.hから参照することができます。見ると、CおよびC++の標準ライブラリに含まれるヘッダがすべてインクルードされており、このことから「#include <bits/stdc++.h>と書くとすべての標準ライブラリを一度にインクルードできる」という性質を持ちます。

      [[bits/stdc++.hとは何か]]