C++ std::衰减和删除常量限定符
我正试图更好地理解std::decay的工作原理。根据cppreference,它应该将const和volatile分类从类型中移除,作为它所做的其他转换的一部分。然而,下面的函数显示False、True和True,正如人们所期望的那样。有人能解释一下,为什么在匹配衰减类型时需要常数吗C++ std::衰减和删除常量限定符,c++,c++11,templates,types,typetraits,C++,C++11,Templates,Types,Typetraits,我正试图更好地理解std::decay的工作原理。根据cppreference,它应该将const和volatile分类从类型中移除,作为它所做的其他转换的一部分。然而,下面的函数显示False、True和True,正如人们所期望的那样。有人能解释一下,为什么在匹配衰减类型时需要常数吗 int main() { const char *p = "testing"; cout << "------------------" << endl; cout &l
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,而不是它所指向的类型,那么decation\t将从指针中删除const
也就是说,char*常量将衰减为char*std::detaction\t将从指针中删除常量,前提是它是常量,而不是它所指向的类型
也就是说,char*常量将衰减为char*它只删除顶级常量。const char*本身实际上不是顶级的const,它是指向const char的指针,但指针本身不是const。另一方面,char*const就是const,并且会变成char*。类似地,const char*const将变成const char*。它只删除顶级constness。const char*本身实际上不是顶级的const,它是指向const char的指针,但指针本身不是const。另一方面,char*const就是const,并且会变成char*。类似地,const char*const将变成const char*。