为什么这么做
struct A { int a };
using B = const A; // or typedef const A B;
decltype(B::a)
的计算结果为int
,而不是const int
。
我想念一生如何学习C ++的哪一章?
答案 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.a
是int
,声明的x
的类型的确是const
。
(1)告诉您x.a
的值类别是 lvalue ,恰好是const
。
(请注意,decltype
behaves differently with parenthesized expressions。)