32 votes

Quelles parties de la bibliothèque standard C ++14 pourraient être et quelles parties seront rendues constexpr?

Avec le nouveau détendu C++14 constexpr règles, au moment de la compilation de la programmation devient beaucoup plus expressif. Je me demande si la Bibliothèque Standard sera également mis à niveau pour prendre l'avantage. En particulier, std::initializer_list, std::pair, std::tuple, std::complex, std::bitset et std::array semblent comme des candidats de choix pour être marqués constexpr commerce de gros.

Questions:

  • quelles sont les parties de la Bibliothèque Standard va maintenant être marquée constexpr?
  • qui d'autres parties pourraient être marqués constexpr?
  • par exemple, pourquoi ne pas les fonctions de <cmath> et <algorithm> marquée constexpr?
  • y sont rétro-compatibilité des raisons de ne pas le faire?

26voto

Rapptz Points 10135

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_categorys'constructeur par défaut
  • std::forward
  • std::move
  • std::move_if_noexcept
  • Tout d' std::pairs'opérateur de comparaisons
  • std::get pour std::pair et std::tuple.
  • std::make_tuple
  • Tout d' std::tuples'opérateur de comparaisons
  • Tout d' std::optionals'opérateur de comparaisons
  • Tout d' std::optionals'constructeurs (sauf pour le déplacer)
  • operator[] et size pour std::bitset et d'autres contenants.
  • Tout d' std::complexs'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::ratios'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)

4voto

Marshall Clow Points 3457

La semaine dernière (Sep 23 à 28, 2013), le comité des normes a ajouté constexpr à plus de routines de la bibliothèque standard.

  • forward_as_tuple
  • l' operator () méthode de tous les comparaison / logique / bit à bit nommé opérateurs. (less, greater, plus, minus, bitwise_and, logical_or, not1 - et le reste)

@TemplateRex: nous Nous rapprochons de tri des tableaux au moment de la compilation.

Cependant, nous avons aussi résolu LWG problème 2013, précisant que les responsables de l'implémentation de la bibliothèque standard n'ont PAS la liberté de faire des appels qui ne sont pas définis dans la norme constexpr comme constexpr, puisque ce genre de différence entre les mises en œuvre possible de modifier le comportement de certains code.

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