如何编写is_reference_const函数,使is_reference_const<const int&>::value'是图尔

How to write is_reference_const function,make is_reference_const<const int&>::value` is ture

本文关键字:const is reference value gt lt 函数 何编写 int      更新时间:2023-10-16

我们看到std::is_const<const int&>::value总是假的。所以这个指令 #1 永远不会执行。

template <typename T>  void g(T&& val)
    {
      if(is_const<T>::value)
      {
      #1  if(is_lvalue_reference<T>::value)cout<<"const l reference"<<endl;
          else if(is_rvalue_reference<T>::value)cout<<"const r reference"<<endl;
          else cout<<"const int"<<endl;
      }else
      {
          if(is_lvalue_reference<T>::value)cout<<"l reference"<<endl;
          else if(is_rvalue_reference<T>::value)cout<<" r reference"<<endl;
          else cout<<" int"<<endl;
      }
    }

为什么 STL 不为此问题提供is_reference_const功能?我们可以为此编写这个函数吗?最后,这个函数如is_reference_const<const int&>::value是图。

任何东西都在标准中,因为有人想要它在那里,并投入精力把它放在那里,并说服委员会这是一个好主意。

这有效:

#include <type_traits>
#include <iostream>
template <typename T>
struct is_reference_const
{
        static const bool value = std::is_reference<T>::value && std::is_const<typename std::remove_reference<T>::type>::value;
};
int main()
{
        std::cout << is_reference_const<const int &>::value << std::endl;
        std::cout << is_reference_const<const int>::value << std::endl;
        std::cout << is_reference_const<int &>::value << std::endl;
        std::cout << is_reference_const<int>::value << std::endl;
}
1
0
0
0

我很惊讶is_const<const int&>::value false.