【问题标题】:std::decay and removing const qualifiersstd::decay 和删除 const 限定符
【发布时间】: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 const char 的指针,但指针本身不是 const)。另一方面,char *const const,会变成char *。同样,const char *const 将变为 const char *

标签: c++ c++11 templates types typetraits


【解决方案1】:

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

也就是说,char* const 会衰减为char*

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2014-06-06
    相关资源
    最近更新 更多