如果我想提取 const 引用的类型(如 const double& 中的 double),是否必须使用:
typename std::remove_cv<typename std::remove_reference<Type>::type>::type
或者
typename std::remove_reference<typename std::remove_cv<Type>::type>::type
?
如果我想提取 const 引用的类型(如 const double& 中的 double),是否必须使用:
typename std::remove_cv<typename std::remove_reference<Type>::type>::type
或者
typename std::remove_reference<typename std::remove_cv<Type>::type>::type
?
先用remove_reference
。remove_cv
仅删除顶级限定符,并且在引用的情况下,没有任何(或被忽略)。
显示差异的示例:
#include <iostream>
#include <type_traits>
template<typename T>
using Remove_cv_ref = std::remove_cv<typename std::remove_reference<T>::type>;
template<typename T>
using Remove_ref_cv = std::remove_reference<typename std::remove_cv<T>::type>;
int main()
{
std::cout << std::is_same<typename Remove_cv_ref<const int&>::type, int>::value; // 1
std::cout << std::is_same<typename Remove_ref_cv<const int&>::type, int>::value; // 0
}
typename std::remove_cv<typename std::remove_reference<Type>::type>::type
因为首先remove_reference<const double&>::type
是const double
,然后remove_cv<const double>::type
是double
。
但是如果你有 C++11,看看std::decay
.