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?


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.