std :: remove_reference_t <std :: remove_cv_t <T>> spielt die Reihenfolge eine Rolle?

8

Ist es wichtig, in welcher Reihenfolge Folgendes angewendet wird?

std::remove_reference_t<std::remove_cv_t<T>>

oder

std::remove_cv_t<std::remove_reference_t<T>>

In welchem ​​Szenario spielt die Bestellung eine Rolle?

Darune
quelle
2
Versuchen Sie es anzuwenden const int&. Sie sollten const intim ersten Fall und intim zweiten bekommen.
Evg
Beantwortet das deine Frage? std :: remove_const mit const Referenzen
Evg
@ Evg Ich denke, es tut etwas, Sie sagen, ich sollte zuerst Referenz entfernen, da Referenzen nicht const sein können?
Darune
Genau. Im Großen und Ganzen können Referenzen nicht nicht " const" sein.
Evg

Antworten:

7

Es gibt Fälle, in denen diese beiden Typmerkmale unterschiedliche Ergebnisse liefern. Betrachten wir zum Beispiel T = const int&.

  1. std::remove_cv_tentfernt den Lebenslauf-Qualifizierer der obersten Ebene und wird const int&zu const int&, da es keinen Lebenslauf-Qualifizierer der obersten Ebene gibt. std::remove_reference_twird dann zurückkehren const int.

  2. Im zweiten Fall std::remove_reference_twird zurückkehren const intund std::remove_cv_tes in verwandeln int.

Einfache Demo

Evg
quelle