std::is_function是如何实现的?



以下如何实现std::is_function

template<class T>
struct is_function : std::integral_constant<
bool,
!std::is_const<const T>::value && !std::is_reference<T>::value
> {};

(来自CPP参考(

在我看来,int将是这个定义下的一个函数。我错过了什么?

让我们回顾一下出现的条件:
如果const T不是 const (const并不真正适用于函数类型,因为函数不是对象(,并且T不是引用(const出于同样的原因也不适用于引用(,它是一个函数类型。int(或任何其他非函数非引用类型(不适合is_const<const int>::value因为true

根据 C++17 标准 §11.3.5 功能/第 7 节:(强调我的(

函数声明符中 cv-qualifier-seq 的效果不是 与在函数类型之上添加 CV 资格相同。在 后一种情况,将忽略 CV 限定符。[ 注意:函数类型 具有 CV 限定符序列的不是符合 CV 条件的类型;没有 符合 CV 标准的函数类型。— 尾注 ] [...]

语言中只有两类类型不能具有 const 限定:引用类型和函数类型。因此,如果const T不是常量限定类型,则意味着T是函数类型或引用类型。如果可以排除引用类型,则只剩下函数类型。

请注意,带有 cv 限定符的函数类型(如int(int) const(不是常量限定类型。这是一个"可恶的函数类型"的示例,其唯一真正的用途是组合或分解指向成员函数类型的指针。类型int(int) const不能通过在int(int)之上添加常量限定来获得。相反,const适用于隐含对象参数。

相关内容

  • 没有找到相关文章

最新更新