【发布时间】:2014-08-24 18:31:48
【问题描述】:
(可能不是 C++14,可能是 Library TS)设施 make_optional 被定义为 (in n3672):
template <class T>
constexpr optional<typename decay<T>::type> make_optional(T&& v) {
return optional<typename decay<T>::type>(std::forward<T>(v));
}
为什么需要转换类型T(即不只是返回optional<T>),是否有哲学(以及实际)理由将decay专门用作转换?
【问题讨论】:
-
因为 T 可以是左值引用,并且不允许可选引用。
-
@Simple 那么为什么不只是
remove_reference? -
大概是因为你不能同时创建
optional<T const>或optional<T[N]>,这也会有奇怪的语义。 -
+1 在我在热门问题列表上看到这个问题前二十分钟,我正在编写一个基于通用参考的 make-like 函数。第一次测试时没有
decay,我花了十分钟才意识到需要decay来删除cualifiers 和通用参考崩溃仍然存在...... 为什么不发布你的问题Ecatmur 前一小时??? :P
标签: c++ typetraits optional c++-standard-library c++14