std::remove_reference or std::remove_cv first?

std::remove_reference or std::remove_cv first?

本文关键字:std remove first reference or cv      更新时间:2023-10-16

如果我想提取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_referenceremove_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&>::typeconst double,然后remove_cv<const double>::typedouble

但是,如果您有C++11,请查看std::decay