Maison >développement back-end >C++ >« std :: array » garantit-il la même taille et la même disposition de la mémoire qu'un tableau C classique ?

« std :: array » garantit-il la même taille et la même disposition de la mémoire qu'un tableau C classique ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-23 06:06:211078parcourir

Does `std::array` Guarantee the Same Size and Memory Layout as a Regular C   Array?

Sémantique garantie pour std::array taille et disposition de la mémoire

En C 11, std::array fournit un stockage contigu et des performances comparables à tableaux réguliers. Cependant, les exigences de la norme pour std::array soulèvent la question : a-t-il nécessairement la même taille et la même disposition de mémoire qu'un tableau équivalent ?

Selon le §23.3.2.1/2 de la norme C, std : :array est un agrégat initialisé à l'aide d'une liste d'initialisation. Étant donné que les agrégats ne peuvent pas utiliser de constructeurs pour convertir les données, la liste d'initialisation doit représenter directement les valeurs stockées dans le tableau.

Cela implique que la taille de std::array doit être déterminée par le nombre d'éléments spécifiés dans son argument de modèle. De plus, la disposition de la mémoire doit être identique à celle d'un tableau, sans aucune donnée auxiliaire ni remplissage.

Bien que la norme n'énonce pas explicitement cette exigence, elle est fortement impliquée par la nature globale de std::array. et le mandat de stockage contigu.

Cela signifie que sizeof(std::array) devrait en effet être égal à sizeof(int) * N, garantissant que les exemples donnés dans la demande d'origine fonctionneront comme prévu.

En pratique, les compilateurs et les implémentations adhèrent généralement à ce comportement attendu. Cependant, il est important de noter que la norme ne l'applique pas strictement, laissant ouverte la possibilité de mises en œuvre non conformes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn