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,而在第二种情况下,应该得到int - Evg
这个回答解决了你的问题吗?std::remove_const with const references - Evg
@Evg 我认为有点影响,你是说我应该先移除引用,因为引用不能是const吗? - darune
没错。粗略地说,引用不能是非“const”的。 - Evg
1个回答

8
有时候,这两种类型特征会产生不同的结果。例如,让我们考虑 T = const int&
  1. std::remove_cv_t 将移除顶层 cv 限定符,将 const int& 转换为 const int&,因为没有顶层 cv 限定符。然后,std::remove_reference_t 将返回 const int

  2. 在第二种情况下,std::remove_reference_t 将返回 const int,而 std::remove_cv_t 将其转换为 int

简单演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接