87 votes

Quelle est la différence entre span et array_view dans la bibliothèque gsl?

Dans plusieurs cas récents de la conférence de présentation, j'ai entendu Bjarne Stroustrup et d'autres mentionnent les nouvelles directives de codage pour le C++, et certains types de les soutenir.

Plus précisément, je me souviens de l'exemple de l' span<T> au lieu de (T* p, int n) comme paramètre d'une fonction (au moment environ 32:00 dans le discours); mais je me souviens aussi de la suggestion d'utiliser array_view<T>. Ils sont deux alternatives, mais la même notion? Ou je confonds les choses et ils ne sont pas vraiment de sorte liés?

Je n'arrive pas à trouver une quelconque autorité de définition de ce qu'ils sont censé être sur.

177voto

Bjarne Stroustrup Points 536

Nous avons parlé avec les gens de la bibliothèque du groupe de travail du comité des normes. Ils voulaient l' array_view ils tentent d'entrer dans la norme pour être en lecture seule. Pour les lignes directrices de base, nous avons besoin d'une couche d'abstraction qui était de lire et d'écrire. Pour éviter un affrontement entre les (potentiels) des normes et des lignes directrices à l'appui de la bibliothèque (GSL), nous l'avons renommé notre (lecture et écriture) array_view de span: https://github.com/microsoft/gsl .

43voto

Galik Points 522

Dans les lignes CppCoreGuidlines Le array_view été renommé en span .

Voir: https://github.com/isocpp/CppCoreGuidelines/pull/377

Il est décrit ainsi:

span est une alternative sûre et vérifiée aux limites d'utiliser des pointeurs pour accéder aux tableaux

11voto

olibre Points 6069

Le document P0122R (2016-02-12) à partir de la Bibliothèque de l'Évolution du Groupe de Travail (LEWG)
officiellement renomme le type array_view de span:

Changelog

Les changements à partir de R0

  • Changé le nom du type qui est proposé à partir de array_view de span suivant les commentaires de LEWG à la Kona réunion.
  • [...]

On peut également lire:

Impact sur le niveau

Cette proposition est une pure extension de bibliothèque. Il ne nécessite pas de modifications des classes, des fonctions, ou les en-têtes. Il serait améliorée si pourrait dépend de l' byte type et les changements de type de repliement de comportement proposé dans P0257.

Toutefois – si elle est adoptée – il peut être utile de surcharger certaines fonctions de bibliothèque standard pour ce nouveau type (un exemple serait l' copy()).

span a été mis en œuvre dans la norme C++ (C++11) et est en cours avec succès utilisé à l'intérieur d'un commercial outil d'analyse statique de code C++, ainsi que commercial logiciels de productivité bureautique. Un open source, l'implémentation de référence est disponible à l' https://github.com/Microsoft/GSL.

Dans un prochain chapitre, ce document présente la lecture seule et en lecture-écriture (mutable) accès:

Les types d'éléments et les conversions

span doit être configuré avec son type d'élément via le paramètre de modèle ValueType, ce qui est nécessaire pour devenir un objet de type ce n'est pas une classe abstraite type. span prend en charge soit en lecture seule ou mutable l'accès à la séquence, il encapsule. Pour accéder à des données en lecture seule, l'utilisateur peut déclarer span<const T>, et l'accès aux données mutable serait d'utiliser un span<T>.

[...]


Voir aussi les lignes Directrices de la Bibliothèque de prise en charge de l'Examen: span<T> de Marius Bancila (mars 2016) définissant span comme:

Les lignes Directrices de la Bibliothèque de prise en charge de Microsoft, la mise en œuvre de quelques-uns des types et fonctions décrits dans le C++ lignes Directrices de Base maintenu par la Norme C++ de la Fondation. Parmi les types fournis par la GSL est - span<T> anciennement array_view<T>.

span<T> est un non propriétaire gamme de mémoire contiguë recommandé pour être utilisé au lieu de les pointeurs (et de la taille du compteur) ou des conteneurs standard (comme std::vector ou std::array).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X