std::tuple sizeof, est-ce une optimisation manquée ?
Oui.
Est-il possible pour une mise en œuvre de le faire ?
Oui.
[Est-ce interdit par une règle de la norme ?
Non !
Lire à travers [tuple]
il n'y a aucune contrainte imposée à l'implémentation pour stocker les membres dans l'ordre des arguments du modèle.
En fait, tous les passages que j'ai pu trouver semblent s'efforcer d'éviter toute référence à l'ordre de déclaration des membres : get<N>()
est utilisé dans la description de la sémantique opérationnelle. D'autres formulations sont énoncées en termes d'"éléments" plutôt que de "membres", ce qui semble être une abstraction délibérée.
En effet, certaines implémentations stockent apparemment les membres dans l'ordre inverse au moins, probablement simplement en raison de la façon dont ils utilisent l'héritage de manière récursive pour décompresser les arguments du modèle (et parce que, comme indiqué ci-dessus, ils y sont autorisés).
En ce qui concerne spécifiquement votre optimisation hypothétique, je ne connais aucune implémentation qui ne stocke pas les éléments dans [une fonction triviale de] l'ordre donné par l'utilisateur ; je suppose qu'il serait "difficile" de trouver un tel ordre et de fournir la machinerie pour le stockage des éléments. std::get
du moins par rapport au gain que vous obtiendriez en agissant de la sorte. Si vous êtes vraiment préoccupé par le remplissage, vous pouvez bien sûr choisir soigneusement l'ordre de vos éléments pour l'éviter (sur une plate-forme donnée), comme vous le feriez avec une classe (sans plonger dans le monde des attributs "emballés"). (Un tuple "emballé" pourrait être une proposition intéressante )
0 votes
Les commentaires ne sont pas destinés à une discussion prolongée. déplacé vers chat .
2 votes
Connexes : Existe-t-il un mot-clé GCC permettant l'enregistrement des structures ? , Le compilateur C++ peut-il réorganiser les éléments d'une structure ? , Pourquoi GCC n'optimise-t-il pas les structures ? , Réorganisation automatisée des champs dans les structures C pour éviter le remplissage
0 votes
@phuclv : Il y a une grande différence entre une
struct
et untuple
=> l'un est une construction linguistique, l'autre un type de bibliothèque. Pourquoi pensez-vous qu'ils doivent obéir aux mêmes règles ?0 votes
@MatthieuM. Où ai-je dit qu'ils obéissaient aux mêmes règles ?
0 votes
@phuclv : Alors quel est l'intérêt des questions connexes ? Si elles obéissent à des règles différentes, regarder les règles pour struct ne sert à rien.