c++ - 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 参考)
在我看来, anint
将是此定义下的函数。我错过了什么?
解决方案
让我们回顾一下出现的条件:
If const T
is not const (const
并不真正适用于函数类型,因为函数不是对象),并且T
不是引用 (const
也不适用于引用,原因相同) ,它是一个函数类型。int
(或任何其他非函数非引用类型)不适合,因为is_const<const int>::value
is true
.
根据C++17 标准§11.3.5 函数/第 7 节:(强调我的)
函数声明器中 cv-qualifier-seq 的效果与在函数类型之上添加 cv-qualification 不同。在后一种情况下,将忽略 cv 限定符。[ 注意:具有 cv-qualifier-seq 的函数类型不是 cv-qualified 类型;没有 cv 限定的函数类型。— 尾注] [...]
推荐阅读
- python - OpenCV 函数在被 C++ 线程程序调用的 Python 脚本调用时锁定
- r - 具有自相关残差的时间序列的直线(预测包中的 auto.arima)
- html - 响应式引导材料的问题:剩余空间过多
- java - Java Hashmap:获取大于X值的所有键
- angular - 将元素添加到 Observable
- r - 反转图像的黑白颜色
- r - 列出和取消列出行为与预期不符
- c# - 不稳定的错误没有 MediaTypeFormatter 可用于从媒体类型为“text/html”的内容中读取 Object 类型的对象
- php - Laravel 无法从表单正确路由
- r - 使用多重和可变过滤器计数数据