使用右值参考和自动

dod*_*dol 4 c++ c++11

鉴于下面的代码,一切正常.为什么变量d引用int?到底是怎么回事?

int main()
{
    int a= 10;
    int &&b = a+10; // b is int &&
    auto c =b+10; // c is int
    auto &&d = a; // d is int&
    //int &&di = a; // error, as expected
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

bam*_*s53 6

这与类型推导中的参考折叠规则有关.

A& & becomes A&
A& && becomes A&
A&& & becomes A&
A&& && becomes A&&
Run Code Online (Sandbox Code Playgroud)


Cos*_*syn 4

类型推导有一个特殊的规则。在auto &&d = a;“auto&&”中,是对非常量非易失性类型的右值引用,而“a”是左值,则应用此特殊规则:“a”的类型被视为 int& 而不是 int。然后像往常一样选择“auto”的类型与“a”的类型相同,即int&。因此,根据 bames53 提到的引用折叠,“auto&&”的类型是 int& 。