Plus tôt dans la journée (en fait hier en raison de mon fuseau horaire), je tentais une interview de programmation en utilisant Visual Studio 2012 pour C++ sur Interview Street (qui utilise g ++).
Pour être bref, je suis tombé sur plusieurs erreurs de compilation1 quand j'utilisais
#include <cstring>
qui a été fourni par le code squelette dans l'une des questions, et après être passé à
#include <string>
toutes les erreurs de compilation ont disparu comme par magie.
Cependant, lors de la soumission à Interview Street, j'ai dû ajouter c
en arrière; sinon j'ai des erreurs de compilation.
C'était la première fois que j'étais mordu par la non-normalisation ...
Ma question est: que contient <string>
et <cstring>
m'a pris (précieux) plus d'une demi-heure?
1 Pour toute personne curieuse:
Une erreur de Visual Studio 2012 si using <cstring>
est:
erreur C2338: la norme C++ ne fournit pas de hachage pour ce type.
dans
c:\fichiers de programme (x86)\Microsoft visual studio 11.0\vc\include\xstddef
éventuellement pour string
comme clé dans unordered_map
Une erreur par g ++ si using <string>
est:
'strlen' n'a pas été déclaré dans ce domaine
L'en-tête cstring
fournit des fonctions pour traiter les chaînes de style C - des tableaux de caractères à terminaison nulle. Cela inclut des fonctions comme strlen
et strcpy
. C'est la version C++ du classique string.h
en-tête de C.
L'en-tête string
fournit le std::string
classe et fonctions et opérateurs associés.
Les en-têtes ont des noms similaires, mais ils ne sont pas vraiment liés au-delà de cela. Ils couvrent des tâches distinctes.
<cstring>
a le code de chaîne C de l'en-tête C string.h. C++
a une convention selon laquelle les en-têtes C
ont le même nom de base, à l'exception d'un c
de début et sans _ .h
. Tous les contenus sont disponibles sous std::
espace de noms.
<string>
possède la bibliothèque standard std::string
et fonctions associées
En C++, vous n'utiliseriez pas #include <somefile.h>
, mais plutôt #include <somefile>
. Maintenant, C++ a ses classes de chaînes dans <string>
, mais les fonctions de chaîne de caractères sont également disponibles, ce qui serait dans <string.h>
. C++ utilise des fichiers c-include "traditionnels". Donc, <cstring>
et <string>