Почему эта ссылка на rvalue работает только для целых чисел, а не для структур [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему эта ссылка на rvalue работает только для целых чисел, а не для структур [дубликат]

Сообщение Anonymous »


#include //Опция 1 структура объекта { auto f(int&& x) { printf("&&\n"); } auto f(int const& x) { printf("const&\n"); } auto g() const { return int {}; } const auto h() const { return int {}; } }; //вариант 2 структура Obj2 { auto f(Obj&& x) { printf("&&\n"); } auto f(Obj const& x) { printf("const&\n"); } auto g() const {return Obj{}; } const auto h() const { return Obj{}; } }; интервал основной() { { интервал х; объект объект; объект.f(obj.g()); // печатает "&&" объект.f(obj.h()); // печатает "&&" } printf("\n"); { Объект х; Объект2 объект; объект.f(obj.g()); // печатает "&&" объект.f(obj.h()); // не печатает "&&" ?! Почему? } } Насколько я знаю, если вы установите значение из возврата функции, возвращаемое значение функции будет rvalue.

auto x = foo(y); // x всегда получает значение r, верно? В приведенном выше коде, видимо, это происходит не всегда. Если y является int, это работает (вариант 1), но если y является структурой, возвращаемое значение g по-прежнему является значением r, но не для h. Почему? Почему это работает для целых чисел, а не для структур?

Я использую C++20 и gcc 13.2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»