quelles sont les parties de la Bibliothèque Standard sera désormais marqué constexpr?
À partir de l'ébauche que j'ai regardé pour le C++14, N3690, la suite sera changé à l' constexpr
jusqu'à présent (En comparaison avec le standard C++11)†:
-
std::error_category
s'constructeur par défaut
std::forward
std::move
std::move_if_noexcept
- Tout d'
std::pair
s'opérateur de comparaisons
-
std::get
pour std::pair
et std::tuple
.
std::make_tuple
- Tout d'
std::tuple
s'opérateur de comparaisons
- Tout d'
std::optional
s'opérateur de comparaisons
- Tout d'
std::optional
s'constructeurs (sauf pour le déplacer)
-
operator[]
et size
pour std::bitset
et d'autres contenants.
- Tout d'
std::complex
s'opérateur de comparaisons
† Depuis que je l'ai fait manuellement, vous pouvez vous attendre quelques erreurs :(
Pour un autre peut-être plus correct liste d' constexpr
ajouts que vous pouvez vérifier: N3469, N3470, et N3471
qui d'autres pièces pourrait être marqué constexpr?
La plupart des choses qui pourraient être constexpr
(std::numeric_limits
évaluation, std::tuple
et std::pair
constructeurs, etc) ont déjà été marqués constexpr
dans le C++11. Il y avait un bug dans lequel std::ratio
s'points dans le temps et d'autres éléments n'est pas marqué comme constexpr
, mais il a été fixé dans N3469.
Quelque chose qui pourrait bénéficier d' constexpr
ajouts seraient std::initializer_list
, qui n'ont pas obtenu tout ce temps là (et je ne suis pas sur si il y a eu des propositions pour l'autoriser).
y sont rétro-compatibilité des raisons de ne pas le faire?
Puisque c'est une extension, la plupart des choses ne sera pas en panne depuis plus âgés code compiler et rien n'est maintenant mal formé. Cependant l'ajout d' constexpr
pour les plus âgés des choses qui n'ont pas, il pourrait conduire à des résultats étonnants si vous n'avez pas l'attendre, comme dans l'exemple fourni ici (Merci TemplateRex)