标准库中是否存在仅移除右值引用而非左值引用的工具?
问题解答
标准库中的对应工具
在C++20及以后的标准中,已经内置了完全匹配你需求的工具:std::remove_rvalue_reference 以及它的别名模板 std::remove_rvalue_reference_t。
它的行为和你实现的逻辑完全一致:
- 若输入是右值引用(比如
int&&),输出对应的非引用类型(int) - 若输入是左值引用(比如
int&)或非引用类型(比如int),则保留原类型不变
你可以直接用标准库工具替代自定义实现,示例如下:
// C++20及以上版本可用 template<typename TYPE> using not_rvalue_reference_t = std::remove_rvalue_reference_t<TYPE>;
自定义工具的最佳命名
如果需要在C20之前的环境下自定义,最佳命名要贴合C标准库的命名惯例:
- 结构体命名为
remove_rvalue_reference - 别名模板命名为
remove_rvalue_reference_t
这种动作式命名和标准库中remove_reference、remove_const等工具的风格一致,其他开发者看到就能立刻理解功能,比你原本的not_rvalue_reference更符合行业共识。
自定义实现示例:
template<typename TYPE> struct remove_rvalue_reference { using type = std::conditional_t<std::is_rvalue_reference_v<TYPE>, std::remove_reference_t<TYPE>, TYPE>; }; template<typename TYPE> using remove_rvalue_reference_t = typename remove_rvalue_reference<TYPE>::type;
内容的提问来源于stack exchange,提问作者AKL
相关产品推荐
相关产品推荐

