web-dev-qa-db-fra.com

C++ - La chaîne est-elle un type de données intégré?

Dans C++, string est-il un type de données intégré?

Merci.

15
Simplicity

Quelle est la définition de built-in que vous voulez utiliser? Est-ce que built-in le jeu d’outils du compilateur que vous avez yes , il le devrait. Est-il traité spécialement par le compilateur? no , le compilateur traite ce type comme tout type défini par l'utilisateur. Notez que la même chose peut probablement être appliquée à de nombreuses autres langues pour lesquelles la plupart des gens répondront yes .

L'un des objectifs du comité C++ est de minimiser le langage principal et de fournir autant de fonctionnalités que possible dans les bibliothèques. Cela a deux intentions: le langage principal est plus stable, les bibliothèques peuvent être réimplémentées, améliorées ... sans changer le noyau du compilateur. Mais plus important encore, le fait de ne pas avoir besoin d’un support spécial du compilateur pour gérer la plupart des bibliothèques standard garantit que le langage principal est suffisamment expressif pour la plupart des utilisations. 

Simplement dit en négatif: si le langage nécessitait un support spécial du compilateur pour implémenter std::string, cela signifierait que les utilisateurs ne disposent pas de suffisamment de pouvoir pour exprimer ce concept ou un concept similaire dans le langage principal.

Ce n'est pas une primitive, c'est-à-dire qu'elle n'est pas "intégrée" comme le sont int, char, etc. Le type de chaîne intégré le plus proche est char * ou char[], ce qui est l'ancienne méthode de C pour faire des choses stridentes, mais même cela nécessite un tas de code de bibliothèque pour une utilisation productive.

std::string fait plutôt partie de la bibliothèque standard fournie avec presque tous les compilateurs C++ modernes existants. Vous aurez besoin de #include <string> (ou d'inclure quelque chose qui l'inclut, mais vous devriez vraiment inclure ce à quoi votre code fait référence) pour pouvoir l'utiliser.

9
cHao

Si vous parlez de std :: string, alors non.

Si vous parlez de tableau de caractères, je suppose que vous pouvez le traiter comme un tableau de type intégré.

7
BЈовић

Non.

Les types intégrés ou "primitifs" peuvent être utilisés pour créer une fonctionnalité de chaîne de vie avec le type intégré char. Ceci, avec les fonctions utilitaires, était ce qui était utilisé dans C. En C++, il y a toujours cette fonctionnalité mais une manière plus intuitive d'utiliser des chaînes a été ajoutée.

La classe string fait partie de l'espace de noms std et constitue une instanciation de la classe de modèle basic_string. Il est défini comme

typedef basic_string<char> string;

C’est une classe capable de redimensionner dynamiquement selon les besoins et comportant de nombreuses fonctions membres jouant le rôle d’utilitaires. Il utilise également la surcharge de l'opérateur, ce qui rend son utilisation plus intuitive. Cependant, cette fonctionnalité signifie également qu’elle a une surcharge en termes de vitesse.

3
quasiverse

Cela dépend de ce que vous entendez par intégré, mais probablement pas. std::string est défini par la bibliothèque standard (et donc la norme C++) et est très universellement pris en charge par différents compilateurs, mais il ne fait pas partie du langage principal comme int ou char.

3
jho

Il peut être intégré, mais ce n’est pas nécessairement le cas. 

La bibliothèque standard C++ a une interface documentée pour ses composants. Cela peut être réalisé soit sous forme de code de bibliothèque, soit en tant que compilateur intégré. La norme ne dit pas comment elle devrait être mise en œuvre.

Lorsque vous utilisez #include <string>, vous avez l’implémentation std :: string disponible. Cela peut être soit parce que le compilateur l'implémente directement, soit parce qu'il est lié à un code de bibliothèque. Nous ne savons pas avec certitude, à moins de vérifier chaque compilateur.

Aucun des compilateurs connus n'a choisi d'en faire un type intégré, car ce n'était pas nécessaire. Les performances d'une implémentation de bibliothèque pure étaient évidemment suffisantes.

1
Bo Persson

Définitivement pas. String est une classe de la bibliothèque standard. char * , ou char [] sont des types intégrés, mais char, int, float, double, void, bool sans ajouts (pointeurs, tableaux, signe ou taille les modificateurs - unsigned, long etc.) sont des types fondamentaux.

0
kill3rreaper

Non, cela fait partie de la bibliothèque standard.

0
Kylo