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 :
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
, etmap
.queue
stack
deque
vector
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.
Les entrées/sorties incluent des composants pour les déclarations de transfert (), les
iostreams
objets prédéfinisiostreams
(iostream
), les classes de baseiostreams
(ios
), la mise en mémoire tampon de flux (streambuf
), la mise en forme de flux et les manipulateurs (iosmanip
,istream
),ostream
les flux de chaîne (sstream
) et les flux de fichiers (fstream
).iosfwd
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.