败犬日报 2025-05-11
1. cppreference.cn
不是正版网站,正版是 com
不要用。
2. std::decay
和 std::remove_cvref
有什么区别
只是移除 cvref 限定的话,没区别。(解释一下,cvref 指的是 const volatile 左值右值引用这几个的组合)
std::decay
是模拟 auto x = (?);
的推导结果,移除了 cvref 限定只是顺手的事,还会导致数组退化成指针、函数退化成指针。
std::remove_cvref
就是单纯的移除 cvref 限定。
所以易得它们的区别:
cpp
static_assert(std::is_same_v<std::decay_t<int (&)[8]>, int*>);
static_assert(std::is_same_v<std::remove_cvref_t<int (&)[8]>, int[8]>);