std::decay 并删除 const 限定符

use*_*729 2 c++ templates types type-traits c++11

我试图更好地理解 std::decay 的工作原理。根据 cppreference ,它应该从类型中删除 const 和 volatile 分类,作为它所做的其他转换的一部分。然而,下面的函数显示“False”、“True”与“True”、“True”,正如人们所期望的那样。有人可以澄清为什么在与此处的腐烂类型匹配时需要 const 吗?

int main()
{
   const char *p = "testing";
   cout << "------------------" << endl;
   cout << boolalpha << is_same<char *, decay_t<decltype(p)>>::value << endl;
   cout << boolalpha << is_same<const char *, decay_t<decltype(p)>>::value << endl;
   cout << "------------------" << endl;
}
Run Code Online (Sandbox Code Playgroud)

Ted*_*gmo 5

std::decay_tconst将从指针中删除,如果它是const,而不是它所指向的类型。

也就是说, achar* const会衰变成 a char*