Почему преобразование rvalue в lvalue ref не вызывает предупреждения? - PullRequest
0 голосов
/ 04 августа 2020

Кто-нибудь знает, почему следующий код не выдает предупреждения?

struct Foo
{
    int a = 1;
};

struct Bar
{
    Foo getString()
    {
        return Foo();
    }
};

int main()
{
    Bar a;
    const Foo& b = a.getString();   <--- Foo getString() becomes Foo&?
}

https://gcc.godbolt.org/z/GYzWa7

1 Ответ

5 голосов
/ 04 августа 2020

Здесь не о чем предупреждать. Путем привязки ссылки const к временному объекту, возвращаемому getString, его время жизни увеличивается, чтобы соответствовать времени жизни ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...