Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::衰减和删除常量限定符_C++_C++11_Templates_Types_Typetraits - Fatal编程技术网

C++ std::衰减和删除常量限定符

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

我正试图更好地理解std::decay的工作原理。根据cppreference,它应该将const和volatile分类从类型中移除,作为它所做的其他转换的一部分。然而,下面的函数显示False、True和True,正如人们所期望的那样。有人能解释一下,为什么在匹配衰减类型时需要常数吗

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*。