Почему эта ссылка на rvalue работает только для целых чисел, а не для структур [дубликат] ⇐ C++
-
Anonymous
Почему эта ссылка на rvalue работает только для целых чисел, а не для структур [дубликат]
#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
#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
Мобильная версия