不依赖类型传播的常量

时间:2018-08-26 19:40:13

标签: c++ c++14 c++17

为什么这么做

struct A { int a };   
using B = const A;    // or typedef const A B;

decltype(B::a)的计算结果为int,而不是const int。 我想念一生如何学习C ++的哪一章

1 个答案:

答案 0 :(得分:8)

假设您的意思是decltype(B::a),我不明白您为什么期望它返回const int

decltype(x)大致为您提供了“类型x被声明为” ,在这种情况下为int

这是一个有趣的例子:

int main()
{
    B x{};
    static_assert(std::is_same_v<decltype(x.a), int>); // (0)
    static_assert(std::is_same_v<decltype((x.a)), const int&>); // (1)
}

(0)告诉您,即使x.aint,声明的x的类型的确是const

(1)告诉您x.a的值类别是 lvalue ,恰好是const

(请注意,decltype behaves differently with parenthesized expressions。)