【发布时间】:2020-09-26 18:34:38
【问题描述】:
我试图更好地理解 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;
}
【问题讨论】:
-
它只删除了一个顶级常量。
const char *本身实际上并不是顶层的 const (它是 to constchar的指针,但指针本身不是 const)。另一方面,char *const是 const,会变成char *。同样,const char *const将变为const char *。
标签: c++ c++11 templates types typetraits