Standard C++ ライブラリに関するよく寄せられる質問

この記事では、Standard C++ ライブラリに関するよく寄せられる質問 (FAQ) と、それらの質問に対する回答の一覧を提供します。

元の製品バージョン:   Visual C++
元の KB 番号:   154419

Standard C++ ライブラリに含まれるもの

Standard C++ ライブラリは拡張可能なフレームワークを提供し、言語サポート、診断、一般的なユーティリティ、文字列、ローカル、標準テンプレート ライブラリ (コンテナー、反復子、アルゴリズム、数値)、および入出力用のコンポーネントを含む。

Standard C++ ライブラリは、次のカテゴリに分けることができます。

  1. 標準テンプレート ライブラリ (STL) コンポーネントは、最も広く使用されているアルゴリズムとデータ構造のサブセットにアクセスできる C++ プログラムを提供します。 STL ヘッダーは、次の 3 つの主要な組織の概念にグループ化できます。

    • コンテナー: データを整理する一般的な方法 (、など) をサポート vector list deque stack queue する set テンプレート クラス map

    • アルゴリズム: 関数、アルゴリズム、数値などのオブジェクトのシーケンスに対して一般的な操作を実行するためのテンプレート関数。

    • 反復子: ユーティリティ、反復子、メモリなど、アルゴリズムとコンテナーを一緒に貼り付ける接着。

  2. 入出力には、 ( ) 、 定義済みオブジェクト ( ) 、 基本クラス ( ) 、 ストリーム バッファー ( ) 、 ストリームの書式設定とマニピュレータ ( 、 ) 、 文字列ストリーム iostreams iosfwd iostreams iostream iostreams ios streambuf iosmanip istream ostream ( sstream fstream ) 、およびファイル ストリーム ( ) の順方向宣言のコンポーネントが含まれます。

  3. その他の標準 C++ ヘッダーには、次のものが含まれます。

    • 言語サポート: ライブラリ全体で使用される一般的な型定義のコンポーネント ( ) 、定義済みの型の特性 ( 、 、 ) 、C++ プログラムの開始と終了をサポートする関数 ( )、動的メモリ管理のサポート ( )、動的型識別のサポート ( )、例外処理のサポート cstddef limits ( cfloat climits cstdlib new typeinfo exception )、 cstdarg ctime csetlmp csignal その他のランタイム サポート ( 、 、 ) 。

    • 診断: いくつかの種類の例外的な条件 ( ) を報告するコンポーネント、プログラム アサーション ( )、およびエラー番号コード ( ) のグローバル変数を stdexcept cassert 文書化します cerrno

    • 文字列: 文字列クラス ( ) および null 終端シーケンス ユーティリティ string ( 、 ) のコンポーネント cctype cwctype cwchar

    • ローカライズ: C++ プログラムが文化的な違いをカプセル化するために使用できるコンポーネント。 ロケール機能には、文字分類と文字列照合順序、数値、通貨、日付/時刻の書式設定と解析、およびメッセージ取得 ( 、 ) の国際化のサポートが含まれます locale clocale

CRT ライブラリと Standard C++ ライブラリの違いは何ですか? ランタイム ライブラリ コンパイラ オプションに含まれるライブラリ

Visual C++ Microsoft Foundation クラス (MFC) ライブラリの他に、次のライブラリを含める必要があります。

  • 基本的な C-Runtime ライブラリ
  • 標準 C++ ライブラリ
ライブラリの種類と関連するコンパイラ スイッチ 基本 C ランタイム ライブラリ / 標準 C++ ライブラリ
シングル スレッド (/ML) LIBC。LIB /LIBCP。LIB
デバッグ シングル スレッド (/MLd) LIBCD。LIB /LIBCPD。LIB
マルチスレッド (/MT) LIBCMT。LIB / LIBCPMT。LIB
マルチスレッドのデバッグ (/MTd) LIBCMTD。LIB / LIBCPMTD。LIB
マルチスレッド DLL (/MD) MSVCRT。LIB / MSVCPRT。LIB
Debug Multithreaded /DLL ( MDd ) MSVCRTD。LIB / MSVCPRTD。LIB

注意

  • 静的シングル スレッド ML の /ML および /MLd ライブラリ コンパイラ オプションは、このページで削除Visual C++。
  • MSVCPRT.lib および MSVCPRTD.lib は静的ライブラリであり、動的リンク ライブラリ (DLL) に直接関連付けはありません。 これらのライブラリは、 それぞれ MSVCRT.libMSVCRTD.lib にも依存します。 MSVCPRT.lib または MSVCPRTD.lib を使用するアプリケーションがある場合は、[既定 ライブラリを無視 する ](/NOD または NODEFAULTLIB) オプションを使用する場合は、必ず MSVCPRT.lib (または MSVCPRTD.lib)MSVCRT.lib (または MSVCRTD.lib) をアプリケーションにリンクしてください。 それ以外の場合は、アプリケーションをリンクするときにリンカー エラー (LNK2001: MSVCPRT.lib または MSVCPRTD.lib で未解決の外部) が表示されます。 コードで使用するヘッダーによっては、Standard C++ ライブラリのライブラリもリンクされている場合があります。

ヘッダー ファイル use_ansi.h には、Standard C++ ライブラリを強制的にリンクするステートメント #pragma が含まれています。 すべての標準 C++ ヘッダーには 、use_ansi.h が含まれます。アプリケーションに Standard C++ ヘッダーを含める場合、標準 C++ ライブラリは既定でリンクされます。

標準 C++ ヘッダー

列 1 列 2 列 3 列 4
ALGORITHM BITSET COMPLEX DEQUE
EXCEPTION FSTREAM FUNCTIONAL IOMANIP
iOS IOSFWD IOSTREAM ISTREAM
ITERATOR LIMITS LIST LOCALE
MAP MEMORY NUMERIC OSTREAM
QUEUE SET SSTREAM STACK
STDEXCEPT STREAMBUF STRING STRSTREAM
TYPEINFO UTILITY VALARRAY VECTOR

以前のバージョンからプロジェクトを移植する `iostream` Visual C++ .NET 2003 以前のバージョンから古い機能を保持する方法

古いライブラリ iostream (iostream.h) を保持する場合は、コードに 1 つ以上の古いヘッダー ファイル iostream を含めます。 新しい Standard C++ ヘッダーは使用しません。 古いライブラリと新しい Standard C++ ライブラリへの呼び出し iostream は混在しません。

標準 C++ ライブラリをアプリケーションの既定のライブラリにする方法

標準 C++ ライブラリを既定にする場合は、新しい Standard C++ ヘッダーを 1 つ以上含める必要があります。 古い標準 C++ ライブラリと新しい標準 C++ ライブラリの呼び出し iostream は混在しません。 標準 C++ ライブラリ関数を使用するには、古い関数を使用する既存のライブラリ (静的または動的リンク) を iostream 変更する必要 iostream があります。

MFC アプリケーションで標準 C++ ライブラリを使用すると、C-Runtime ライブラリとの競合が発生します

いいえ。 Microsoft Foundation クラス (MFC) では、標準 C++ ライブラリと競合する C-Runtime 関数は使用されません。

エラーが発生する理由 (エラー C2065: ' : 宣言されていない識別子) が含 `cout` まれている場合でも `iostream`

標準 C++ ライブラリは、独自の名前空間に実装されています std 。 プログラムの先頭に次のステートメントを必ず追加してください。

using namespace std;

または、名前空間を使用して各 Standard C++ ライブラリ識別子 std を修飾します 。 std::cout たとえば、 。

エラーが発生する理由 (コンパイラ エラー C2371: 'identifier' の再定義、異なる基本型)

Visual C++ Visual C++ 2005 より前のバージョンの Visual C++ では、標準 C++ ヘッダーと古いヘッダーを混在すると、異なるソース ファイルに含まれている場合でも、このエラーが発生します。 iostream 次に、さまざまなヘッダーを示します。

  • iostream いヘッダー:

    列 1 列 2
    FSTREAM。H IOMANIP。H
    IOS。H IOSTREAM。H
    ISTREAM。H OSTREAM。H
    STDIOSTR。H STREAMB。H
    STRSTREA。H
  • 標準 C++ ヘッダー:

    列 1 列 2 列 3 列 4
    ALGORITHM BITSET COMPLEX DEQUE
    EXCEPTION FSTREAM FUNCTIONAL IOMANIP
    iOS IOSFWD IOSTREAM ISTREAM
    ITERATOR LIMITS LIST LOCALE
    MAP MEMORY NUMERIC OSTREAM
    QUEUE SET SSTREAM STACK
    STDEXCEPT STREAMBUF STRING STRSTREAM
    TYPEINFO UTILITY VALARRAY VECTOR

メッセージが表示される理由 (LNK2001: 未解決の外部シンボル 'symbol';)既定 `iostream` のライブラリを無視してプロジェクトをビルドする場合の関数呼び出し

iostreamC-Runtime ライブラリから関数が削除されました。

古い関数を使用している場合は、別のライブラリ iostream LIBCI.lib (シングル スレッド ML)、LIBCIMT.lib (マルチスレッド MT)、 または MSVCIRT.lib (マルチスレッド dll MD) を追加する必要があります。 これらのライブラリは、これらのライブラリから削除Visual C++。

Standard C++ ライブラリに含まれる新しい関数を使用している場合は、別のライブラリ iostream LIBCP.lib (シングル スレッド ML)、LIBCPMT.lib (マルチスレッド **MT)、**または MSVCPRT.lib (マルチスレッド dll MD) を追加する必要があります。

異なるバージョンのライブラリを混在して使用しない。 たとえば、シングル スレッド バージョンの C-Runtime ライブラリを使用している場合は、古いライブラリまたは Standard C++ ライブラリのシングル スレッド バージョンも使用する iostream 必要があります。

古いライブラリ関数と新しい Standard C++ ライブラリ関数の呼び出しは iostream 混在 iostream しません。

コンパイラの警告 C4786 または C4788 が表示される理由 プログラム内の記号の長さは 255 文字に近い

C4786 または C4788 は、シンボル名の長さが 255 文字を超えると発行されます。 この問題は、多くの場合、テンプレート クラスで発生し、 STL テンプレート クラスを広範囲に使用します。

この警告を無視しても安全です。 メッセージを #pragma 抑制するには、警告 (無効: 4786,4788) を使用します。

メッセージが表示される理由 (C4530: C++ 例外ハンドラーが使用されますが、アンワインド セマンティクスは有効になっていません)。 指定 -GX)

標準 C++ ライブラリを使用するプログラムは、C++ 例外処理を有効にしたコンパイルが必要です。 C++ 例外処理は、次のいずれかの方法で有効にできます。

  • [例外処理]ダイアログ ボックス[C/C++] タブの [C++ 言語カテゴリ] で [例外処理を有効にする] Project 設定 選択します。
  • /GX コンパイラ スイッチ を使用する。

コンパイラ エラー C2146、C2065、最後に C2143 が表示される理由

この一連のエラーは、次の種類の構成によって発生する可能性があります。

vector<int, allocator<int>>iV;

この問題は、宣言の最後の >> 連続が原因です。 解決策は、2 つの文字の間にスペースを入れるので、コンストラクトは次になります。

vector<int, allocator<int> > iV;

これは、提案された ANSII 仕様と一致しています。