c++ - “std::decay_t (C++20 前)std::remove_cvref_t (C++20 起)”是什么意思?
问题描述
解决方案
这很微妙——两个类周围有一个框,表示子短语。假装它们之间有一个“或”,然后这样读:
该函数不参与重载决议,除非 [
std::decay_t<U>
(until C++20) orstd::remove_cvref_t<U>
(since C++20) ] 不是std::optional<T>
...
你可以把它读成两个替代句子:
函数不参与重载决议,除非
std::decay_t<U>
is notstd::optional<T>
... (直到 C++20)函数不参与重载决议,除非
std::remove_cvref_t<U>
is notstd::optional<T>
... (C++20 起)
(在 C++20 中,他们收紧了规范并decay
用remove_cvref
. .)decay
remove_cvref
在英语中,它基本上是在说:
该函数不参与重载决议,除非
U
—ignoring&
,&&
,const
, 和volatile
—is notstd::optional<T>
...
换句话说,过载 (4) 仅在某些条件下可用。如果不满足这些条件,那么完美转发将被取消;据推测,SFINAE用于禁用它。
推荐阅读
- python - 如何将 listiterator 对象转换为树对象?
- jquery - 两个月,同时在引导程序的日期选择器中选择日期
- batch-file - 从所有用户的桌面删除所有图标的批处理脚本
- vba - 编写在模块生成#VALUE 中的公式
- java - 在启动 Activity 时传递 InputConnection 对象
- node.js - 将 NodeJS 应用程序变量绑定到 Pivotal Cloud Foundry 服务
- python - Python tabula-py 错误(熊猫错误?)
- mxnet - 获取隐藏层输出
- excel - 编辑数据连接
- javascript - 将 json 对象返回给渲染方法 - React.js