constness它不为传统类型传播

Gab*_*iel 3 c++ c++14 c++17

为什么这样呢?

struct A { int a };   
using B = const A;    // or typedef const A B;
Run Code Online (Sandbox Code Playgroud)

decltype(B::a)评估int与否const int.我错过了如何在一生中学习C++的哪一章?

Vit*_*meo 7

假设你的意思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)
}
Run Code Online (Sandbox Code Playgroud)

(0)告诉你声明的类型x.a确实是int,即使xconst.

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

(注意,decltype 括号表达式的行为不同.)