Modifier

Forum aux questions sur la bibliothèque C++ Standard

Cet article fournit une liste de questions fréquentes (FAQ) sur les bibliothèques C++ Standard et les réponses à ces questions.

Version d’origine du produit : Visual C++
Numéro de la base de connaissances d’origine : 154419

Que contient la bibliothèque C++ standard

La bibliothèque C++ Standard fournit une infrastructure extensible et contient des composants pour la prise en charge du langage, des diagnostics, des utilitaires généraux, des chaînes, des paramètres régionaux, une bibliothèque de modèles standard (conteneurs, itérateurs, algorithmes et numériques) et des entrées/sorties.

La bibliothèque C++ Standard peut être divisée en catégories suivantes :

  1. Les composants STL (Standard Template Library) fournissent à un programme C++ l’accès à un sous-ensemble des structures de données et algorithmes les plus couramment utilisés. Les en-têtes STL peuvent être regroupés en trois principaux concepts d’organisation :

    • Conteneurs : classes de modèle qui prennent en charge les méthodes courantes d’organisation des données, telles que , list, , , , set, et map. queuestackdequevector

    • Algorithmes : fonctions de modèle permettant d’effectuer des opérations courantes sur des séquences d’objets, telles que fonctionnelles, algorithmes et numériques.

    • Itérateurs : collage qui colle les algorithmes et les conteneurs, tels que l’utilitaire, l’itérateur et la mémoire.

  2. Les entrées/sorties incluent des composants pour les déclarations de transfert (), les iostreams objets prédéfinis iostreams (iostream), les classes de base iostreams (ios), la mise en mémoire tampon de flux (streambuf), la mise en forme de flux et les manipulateurs (iosmanip, istream), ostreamles flux de chaîne (sstream) et les flux de fichiers (fstream).iosfwd

  3. Les autres en-têtes C++ Standard sont les suivants :

    • Prise en charge du langage : composants pour les définitions de type courantes utilisées dans toute la bibliothèque (cstddef), caractéristiques des types prédéfinis (limits, cfloat, climits), fonctions prenant en charge le démarrage et l’arrêt d’un programme C++ (cstdlib), prise en charge de la gestion dynamique de la mémoire (new), prise en charge de l’identification de type dynamique (typeinfo), prise en charge du traitement des exceptions (exception) et autres prises en charge du runtime (cstdarg, ctime, csetlmp, csignal).

    • Diagnostics : composants pour signaler plusieurs types de conditions exceptionnelles (stdexcept), documenter les assertions de programme (cassert) et une variable globale pour les codes de numéro d’erreur (cerrno).

    • Chaînes : composants pour les classes de chaîne (string) et les utilitaires de séquence se terminant par null (cctype, cwctype, cwchar).

    • Localisation : composants que les programmes C++ peuvent utiliser pour encapsuler les différences culturelles. La fonctionnalité de paramètres régionaux inclut la prise en charge de l’internationalisation pour la classification des caractères et le classement des chaînes, la mise en forme et l’analyse numériques, monétaires et de date/heure, ainsi que la récupération des messages (locale, clocale).

Quelle est la différence entre la bibliothèque CRT et la bibliothèque C++ Standard ? Quelles bibliothèques vont inclure les options du compilateur de bibliothèque runtime

Visual C++ inclut les bibliothèques suivantes en plus des bibliothèques MFC (Microsoft Foundation Classes) :

  • Bibliothèque C-Runtime de base
  • Bibliothèque C++ standard
Types de bibliothèque et commutateurs de compilateur associés Bibliothèque runtime C de base / bibliothèque C++ standard
Monothread (/ML) LIBC. LIB / LIBCP. LIB
Déboguer un thread unique (/MLd) LIBCD. LIB / LIBCPD. LIB
Multithread (/MT) LIBCMT. LIB / LIBCPMT. LIB
Déboguer multithread (/MTd) LIBCMTD. LIB / LIBCPMTD. LIB
DLL multithread (/MD) MSVCRT. LIB / MSVCPRT. LIB
Déboguer /DLL multithread (MDd) MSVCRTD. LIB / MSVCPRTD. LIB

Remarque

  • Les options du compilateur de bibliothèque /ML et /MLd pour les bibliothèques monothread statiques ont été supprimées dans Visual C++.
  • MSVCPRT.lib et MSVCPRTD.lib sont des bibliothèques statiques qui n’ont pas de bibliothèques de liens dynamiques (DLL) directement associées. Ces bibliothèques dépendent également de MSVCRT.lib et MSVCRTD.lib, respectivement. Si vous avez des applications qui utilisent MSVCPRT.lib ou MSVCPRTD.lib et que vous utilisez l’option Ignorer la bibliothèque par défaut (/NOD ou NODEFAULTLIB), veillez à lier MSVCPRT.lib (ou MSVCPRTD.lib) et MSVCRT.lib (ou MSVCRTD.lib) à votre application. Sinon, vous obtiendrez des erreurs d’éditeur de liens (LNK2001 : externes non résolus dans MSVCPRT.lib ou MSVCPRTD.lib) lors de la liaison de votre application. Selon les en-têtes que vous utilisez dans votre code, une bibliothèque de la bibliothèque C++ Standard peut également être liée.

Le fichier d’en-tête use_ansi.h contient #pragma des instructions qui forcent la liaison de la bibliothèque C++ Standard. Tous les en-têtes C++ Standard incluent use_ansi.h : si vous incluez un en-tête C++ Standard dans votre application, la bibliothèque C++ Standard sera liée par défaut.

En-têtes C++ standard

Colonne 1 Colonne 2 Colonne 3 Colonne 4
ALGORITHME BITSET COMPLEXE DEQUE
EXCEPTION FSTREAM FONCTIONNELLE IOMANIP
IOS IOSFWD IOSTREAM ISTREAM
ITÉRATEUR LIMITES LISTE PARAMÈTRES RÉGIONAUX
CARTE MÉMOIRE NUMÉRIQUE OSTREAM
FILE D’ATTENTE ENSEMBLE SSTREAM PILE
STDEXCEPT STREAMBUF STRING STRSTREAM
TYPEINFO UTILITAIRE VALARRAY VECTEUR

Comment conserver l’ancienne fonctionnalité « iostream » de Visual C++ .NET 2003 ou versions antérieures si je porte mon projet à partir d’une version antérieure

Si vous souhaitez conserver l’ancienne iostream bibliothèque (iostream.h), incluez un ou plusieurs des anciens iostream fichiers d’en-tête dans votre code. N’utilisez pas les nouveaux en-têtes C++ Standard. Vous ne pouvez pas mélanger les appels à l’ancienne iostream bibliothèque et à la nouvelle bibliothèque C++ Standard.

Comment faire des bibliothèques C++ Standard les bibliothèques par défaut pour mon application

Si vous souhaitez que les bibliothèques C++ Standard soient les bibliothèques par défaut, incluez un ou plusieurs des nouveaux en-têtes C++ Standard. Vous ne pouvez pas mélanger les appels à l’ancienne iostream et à la nouvelle bibliothèque C++ Standard. Les bibliothèques existantes (liaison statique ou dynamique) qui utilisent d’anciennes iostream fonctions devront être modifiées pour utiliser des fonctions de bibliothèque iostream C++ Standard.

Si j’utilise des bibliothèques C++ standard dans les applications MFC, cela provoquera-t-il des conflits avec les bibliothèques C-Runtime

Non. Microsoft Foundation Classes (MFC) n’utilise aucune fonction C-Runtime qui entre en conflit avec les bibliothèques C++ Standard.

Pourquoi j’obtiens l’erreur (erreur C2065 : ''cout'' : identificateur non déclaré) même si j’ai inclus 'iostream'

La bibliothèque C++ standard est implémentée dans son propre espace de noms std. Veillez à ajouter l’instruction suivante au début de votre programme :

using namespace std;

Vous pouvez également qualifier chaque identificateur de bibliothèque C++ Standard avec l’espace de noms std, par exemple. std::cout

Pourquoi j’obtiens l’erreur (erreur du compilateur C2371 : redéfinition de 'identificateur' ; différents types de base)

Dans les versions de Visual C++ antérieures à Visual C++ 2005, la combinaison d’en-têtes C++ Standard et d’anciens iostream en-têtes provoque cette erreur, même s’ils sont inclus dans différents fichiers sources. Voici les différents en-têtes :

  • Anciens en-têtes iostream :

    Colonne 1 Colonne 2
    FSTREAM. H IOMANIP. H
    IOS. H IOSTREAM. H
    ISTREAM. H OSTREAM. H
    STDIOSTR. H STREAMB. H
    STRSTREA. H
  • En-têtes C++ standard :

    Colonne 1 Colonne 2 Colonne 3 Colonne 4
    ALGORITHME BITSET COMPLEXE DEQUE
    EXCEPTION FSTREAM FONCTIONNELLE IOMANIP
    IOS IOSFWD IOSTREAM ISTREAM
    ITÉRATEUR LIMITES LISTE PARAMÈTRES RÉGIONAUX
    CARTE MÉMOIRE NUMÉRIQUE OSTREAM
    FILE D’ATTENTE ENSEMBLE SSTREAM PILE
    STDEXCEPT STREAMBUF STRING STRSTREAM
    TYPEINFO UTILITAIRE VALARRAY VECTEUR

Pourquoi je reçois un message (LNK2001 : symbole externe non résolu 'symbol';) sur les appels de la fonction 'iostream' lorsque le projet est généré avec Ignorer les bibliothèques par défaut

Les iostream fonctions ont été supprimées de la bibliothèque C-Runtime.

Si vous utilisez les anciennes iostream fonctions, vous devez ajouter une autre bibliothèque LIBCI.lib ( ML monothread), LIBCIMT.lib (multithread ) ouMSVCIRT.lib (DLL MD multithread). Ces bibliothèques ont été supprimées de Visual C++.

Si vous utilisez les nouvelles iostream fonctions incluses dans la bibliothèque C++ Standard, vous devez ajouter une autre bibliothèque LIBCP.lib ( ML monothread), LIBCPMT.lib (MT multithread ) ouMSVCPRT.lib(DLL MD multithread).

Ne mélangez pas différentes versions des bibliothèques. Par exemple, si vous utilisez la version monothread de la bibliothèque C-Runtime, vous devez également utiliser la version monothread de l’ancienne iostream bibliothèque ou de la bibliothèque C++ Standard.

Vous ne pouvez pas combiner les appels aux anciennes iostream fonctions de bibliothèque et aux nouvelles fonctions de bibliothèque iostream C++ Standard.

Pourquoi les avertissements du compilateur C4786 ou C4788 s’affichent-ils ? Aucun des symboles de mon programme ne fait près de 255 caractères

C4786 ou C4788 est émis lorsque le nom d’un symbole dépasse 255 caractères. Ce problème se produit souvent avec la classe de modèle et STL utilise largement la classe de modèle.

Ignorer cet avertissement est sans risque. Utilisez un #pragma avertissement (désactiver : 4786,4788) pour supprimer les messages.

Pourquoi je reçois le message (C4530 : gestionnaire d’exceptions C++ utilisé, mais la sémantique de déroulement n’est pas activée. Spécifier -GX)

Les programmes qui utilisent la bibliothèque C++ Standard doivent être compilés avec la gestion des exceptions C++ activée. La gestion des exceptions C++ peut être activée par l’une des méthodes suivantes :

  • Sélection de l’option Activer la gestion des exceptions dans la catégorie de langage C++ de l’onglet C/C++ de la boîte de dialogue Paramètres du projet .
  • Utilisation du commutateur du compilateur /GX .

Pourquoi j’obtiens l’erreur du compilateur C2146, suivie de C2065 et enfin C2143, pointant tous vers la même ligne dans ma source

Cette séquence d’erreurs peut être due au type de construction suivant :

vector<int, allocator<int>>iV;

Le problème est dû à la suite à >> la fin de la déclaration. La solution consiste à placer un espace entre deux caractères, de sorte que la construction devient :

vector<int, allocator<int> > iV;

Il est conforme à la spécification ANSII proposée.