C++ constness它不会为依赖类型传播

C++ constness它不会为依赖类型传播,c++,c++14,c++17,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++的哪一章是我丢失的? < p>假设您是“代码> DECKET(B::A)< /代码>,我不明白为什么您期望它返回 const int < < /P> decltype(x)大致给出了“typex声明为”,在本例中为int 下面是一个有趣的例子

为什么会这样

struct A { int a };   
using B = const A;    // or typedef const A B;
decltype(B::a)
的计算结果为
int
,而不是
const int

在生命中,如何学习C++的哪一章是我丢失的?

< p>假设您是“代码> DECKET(B::A)< /代码>,我不明白为什么您期望它返回 const int < < /P>
decltype(x)
大致给出了“type
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)
}
intmain()
{
bx{};
静态断言(std::is_same_v);/(0)
静态断言(std::is_same_v);/(1)
}
(0)告诉您声明的
x.a
类型确实是
int
,即使
x
const

(1)告诉您
x.a
的值类别是一个左值,正好是
const


(请注意
decltype

您的意思是
decltype(B::a)
?是的,更正了!我希望返回
const int
,因为我假设const限定符也被考虑在内?陛下