2017-08-20 4 views

Répondre

6

P0031 expliqué pourquoi il n'a pas proposé constexpr comparaisons:

comparaisons Actuellement et swap/fill peut être mis en œuvre avec l'aide d'algorithmes d'en-tête <algorithm>. Marquer des comparaisons avec constexpr va casser cette capacité et conduira potentiellement à des dégradations de performance .

Par exemple, == peut être mis en œuvre en termes de std::equal, qui - dans les cas appropriés - peut appeler le très optimisé mais résolument-Dégraissé constexprmemcmp. La création de constexpr pour == exclura cette optimisation sans assistance spéciale du compilateur.

+2

Daniel Kruger dit: Cela peut être résolu quand/si la proposition [P0202] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0202r1.html) est adopté. – einpoklum

-1

La raison peut-être ceci: == d'un tableau ne peut être qu'un constexpr si == de type contenu est un constexpr aussi.

Puisque le conteneur ne peut pas appliquer cela, il ne peut pas (généralement) offrir un operator==() constexpr.

+1

La première phrase est vraie pour toute fonction constexpr basée sur un modèle qui fait n'importe quoi avec son paramètre de modèle. Et - ceux-ci peuvent très bien être fait «constexpr» ... alors ce n'est pas ça. (PS - Not my downvote.) – einpoklum

+1

J'ai du mal à penser à une fonction constexpr basée sur un modèle qui mérite ce nom et qui traite des membres de type non-constexpr ... –