std :: remove_reference_t <std :: remove_cv_t <T >>順序は重要ですか?


8

次のどちらを適用するかは重要ですか?

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

または

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

どんなシナリオで、もしあれば、順序は重要ですか?


2
に適用してみてくださいconst int&const int最初のケースとint2番目のケースに入るはずです。
1

これはあなたの質問に答えますか?std ::
remove_const

@Evgややそうだと思いますが、参照をconstにすることはできないので、最初に参照を削除する必要があると言っていますか?
ダルーン

免責。大まかに言えば、参照は非 " const"であってはなりません。
1

回答:


7

これらの2つのタイプの特性が異なる結果を生成する場合があります。たとえば、を考えてみましょうT = const int&

  1. std::remove_cv_tトップレベルのcv-qualifier がないため、トップレベルのcv-qualifierが削除const int&されconst int&、に変わります。std::remove_reference_tその後、戻りconst intます。

  2. 2番目のケースでstd::remove_reference_tは、が返されconst intstd::remove_cv_tに変換されintます。

簡単なデモ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.