Quelle est la différence entre la vue span et le tableau dans la bibliothèque gsl?
dans plusieurs conférences récentes, J'ai entendu Bjarne Stroustrup et d'autres mentionner de nouvelles directives de codage pour C++ et certains types les supportant.
 en particulier, je me souviens de  l'exemple de span<T> au lieu de (T* p, int n) comme paramètre à une fonction  (au temps environ 32:00 dans la discussion); mais je me souviens aussi de la suggestion d'utiliser array_view<T> . Sont - ils deux alternatives mais le même concept? Ou je confonds les choses et ils ne sont pas vraiment de sorte liés?   
Je n'arrive pas à trouver de définition officielle de ce qu'ils sont censés être.
3 réponses
 nous avons parlé avec des gens dans le  groupe de travail de la bibliothèque  dans le  Comité des normes  . Ils voulaient que le array_view  ils essayent d'entrer dans la norme pour être lu seulement. Pour les lignes directrices de base, nous avions besoin d'une abstraction qui se lisait et s'écrivait. Pour éviter un conflit entre les normes (potentielles) et la bibliothèque de support des lignes directrices (GSL), nous avons renommé notre (lire et écrire)  array_view  en  span :    https://github.com/microsoft/gsl   .  
  Dans le    CppCoreGuidlines    L'original  array_view  a été renommé  span  .  
voir: https://github.com/isocpp/CppCoreGuidelines/pull/377
il est décrit ainsi:
span " est une des limites-vérifié, alternative sûre à l'aide de pointeurs pour accéder à des tableaux
  the document    P0122R   (2016-02-12) from the    Library Evolution Working Group    (LEWG)  
        renomme officiellement le type  array_view  en  span    :  
Changelog
modifie de R0
- a changé le nom du type proposé de
array_viewàspansuite aux commentaires de LEWG à la réunion de Kona.- [...]
on peut aussi lire:
Impact sur le niveau
Cette proposition est une pure extension de bibliothèque. Il n'est pas nécessaire de modifier les classes, les fonctions ou les en-têtes standard. Il serait amélioré si pourrait Dépend du type
byteet modifications du comportement d'aliasing de type proposé dans P0257 .cependant - si adopté – il peut être utile de surcharger certaines fonctions de bibliothèque standard pour ce nouveau type (un exemple serait
copy()).
spana été implémenté dans la norme C++ (C++11) et est en train d'être implémenté avec succès utilisé dans un outil d'analyse statique commerciale pour le code C++ ainsi que dans un logiciel de productivité de bureau commercial. Une implémentation de référence en open source est disponible à https://github.com/Microsoft/GSL .
dans un chapitre suivant, ce document présente le en lecture seule et en lecture seule ( mutable ) accès:
types D'éléments et conversions
spandoit être configuré avec son type d'élément via le paramètre templateValueType, qui doit être un type d'objet complet ce n'est pas un type de classe abstrait.spansupporte soit l'accès en lecture seule, soit l'accès mutable à la séquence qu'il encapsule. Pour accéder aux données en lecture seule, l'utilisateur peut déclarer unspan<const T>, et l'accès aux données mutables utiliserait unspan<T>.[...]
  Voir Aussi Le     lignes directrices Revue de la bibliothèque:  span<T>        de Marius Bancila (mars 2016) définissant  span  comme:  
le bibliothèque de soutien de lignes directrices est une mise en œuvre de Microsoft de certains des types et fonctions décrits dans les C++ Core Guidelines maintenu par la Standard C++ Foundation . Parmi les types fournis par la GSL est
span<T>anciennement connu sous le nom dearray_view<T>.
span<T>est une gamme Non propriétaire de mémoire contiguë qu'il est recommandé d'utiliser au lieu de pointeurs (et compteur de taille) ou conteneurs standard (tels questd::vectoroustd::array).