URL: https://linuxfr.org/users/serge_ss_paille/journaux/une-structure-partiellement-constante-en-c Title: Une structure partiellement constante en C++ Authors: serge_sans_paille Date: 2018年07月06日T09:01:14+02:00 License: CC By-SA Tags: c++ Score: 27 Hop, quelques réflexions sur un langage non réflexif. Si on veut un tableau de taille statique, on peut utiliser depuis C++11 la classe ``std::array``. ```c++ std::array my_array{{1, 2, 3, 5, 8}}; ``` Si on veut forcer ce tableau à ne contenir que des constantes utilisables à *compile-time*, on a la possibilité de marquer cette déclaration ``constexpr``. ```c++ constexpr std::array my_array{{1, 2, 3, 5, 8}}; ``` Mais si on veut la marquer **partiellement** constante ? Et bien je soumets à votre sagacité la déclaration suivante : ```c++ std::tuple, long, std::integral_constant, long> my_array{1, {}, 3, {}, 8}; ``` Alors certes on perd la possibilité d'itérer **facilement** (mais il reste possible de faire un visiteur de tuple), par contre on gagne en place mémoire (un ``std::integral_constant<...>`` ne prend pas de place), et on donne une info au compilateur pour, propager des constantes avec certitude, comme on peut le voir sur [cet exemple](https://godbolt.org/g/ccBjMc). On notera que cette astuce ne marche que grâce à l'opérateur de conversion implicite [défini dans le type ``std::integral_constant``](https://en.cppreference.com/w/cpp/types/integral_constant). Mais l'astuce est plaisante. Et n'en déplaise aux cyclistes, dans un monde peuplé d'``auto``, cette information portée par le type peut se propager assez loin !

AltStyle によって変換されたページ (->オリジナル) /