Описание тега lvalue-to-rvalue

Используйте этот тег для вопросов преобразования lvalue в rvalue
2 ответа

Присвоение Rvalue, возвращенного из функции другому Rvalue

class Test { public: int n1; }; Test func() { return Test(); } int main() { func() = Test(); } Это не имеет смысла для меня. Как и почему это разрешено? Это неопределенное поведение? Если функция возвращает значение rvalue, то как можно установить з…
13 фев '16 в 09:11
1 ответ

Преобразование Lvalue в rvalue для типов классов: происходит ли копирование?

(Я задавал этот вопрос раньше, но не привел жизнеспособного примера, поэтому я удалил предыдущий. Надеюсь, что на этом я понял пример правильно.) Случай: #include <iostream> struct S { S() = default; S(const S &) { std::cout << "Copy…
2 ответа

Значение на левой стороне

Почему этот код компилируется? Я думал, что значения, возвращаемые ctor, не находятся в памяти и поэтому не могут использоваться как значения. #include <iostream> #include <vector> class Y { public : explicit Y(size_t num = 0) : m_resour…
17 янв '16 в 06:13
1 ответ

Удалить узел из двоичного дерева поиска в C

Я пытаюсь удалить узел из двоичного дерева поиска. Но когда я хочу проверить функцию, я получу сообщение об ошибке в "случае 3: два ребенка". clist->name = temp->name; Эта строка вызывает сообщение об ошибке. Это говорит: левый операнд должен …
06 ноя '15 в 00:52
1 ответ

Почему неконстантная ссылка должна быть инициализирована lvalue?

Вот фрагмент кода, который вызывает ошибку C2664: невозможно преобразовать аргумент 1 из 'std:: unique_ptr>' в 'ComPtr &' Так почему неконстантная ссылка должна быть инициализирована lvalue? Как избежать этого, кроме объявления новой переменной? #in…
14 авг '18 в 04:04
0 ответов

Как std::move может работать с конструктором копирования, который принимает неконстантную ссылку?

Я читал о std::move. Основываясь на довольно немногих материалах, я пришел к выводу, что std:: move - это просто функция, которая преобразует тип своего аргумента в ссылку-значение. Я также читал, что rvalue-ссылки могут использоваться с функциями, …
1 ответ

Это Rvalue или Lvalue после приведения

Код здесь проверяет lvalue или rvalue после приведения типа: #include <stdio.h> template <typename T> T const f1(T const &t) { printf("T const \n"); return t; } template <typename T> T f1(T &t) { printf("T\n"); return t; } …
25 ноя '16 в 09:38
2 ответа

C++11 неоднозначная ошибка с двумя операторами (один lvalue второй rvalue)

ОБНОВЛЕНИЕ внизу. Я хочу, чтобы make void tree::operator = ( tree t) использовал значение rvalue (в этом случае, в общем, я хочу обрабатывать их по- разному из-за эффективности) Я кодировал его, использовал std:: move, чтобы убедиться, что он будет …
2 ответа

Путаница связывания значений в C++

У меня есть три вызова функций, которые, по моему мнению, должны рассматриваться (примерно) одинаково, но, очевидно, это не так. Я пытаюсь понять, почему один из трех не компилируется (g++ -std= C++0x). // Minimal example to reproduce a compile bug …
3 ответа

Преобразование lvalue в rvalue массива в ISO C

C++ ANSI ISO IEC 14882 2003 Приложение C.1 (стр. 668): Изменение: результат условного выражения, выражения присваивания или выражения запятой может иметь значение lvalueОбоснование: C + + является объектно-ориентированным языком, уделяющим сравнител…
1 ответ

Понимание примера преобразования lvalue в rvalue

Мне трудно понять, как этот код (пример из проекта стандарта C++14 [conv.lval]) вызывает неопределенное поведение для g(false), Почему constexpr сделать программу действительной? Кроме того, что означает "не доступ y.n"? В обоих звонках g() мы возвр…
5 ответов

Произойдет ли преобразование lvalue в rvalue?

Стандарт C++ (4/5) преобразование lvalue в rvalue не выполняется для операнда унарного оператора &. Например: int x; int *p = &x; В приведенном выше случае, являются p являются &x оба значения? или какой будет подходящий пример? Редактироват…
2 ответа

Преобразование Lvalue в rvalue не выполняется

Следующая функция возвращает значение r: int foo() { int x = 42; return x; // x is converted to prvalue } AST Clang также показывает преобразование: `-FunctionDecl <line:1:1, line:5:1> line:1:5 foo 'int ()' `-CompoundStmt <line:2:1, line:5:…
25 апр '18 в 14:19
2 ответа

Разница между реализацией std::forward

Недавно я пытался понять семантику перемещения и задал вопрос. Вопрос уже обсуждался здесь. Я реализовал первый вариант и проверил, возвращает ли он l-значение или r-значение: #include <iostream> using namespace std; template <typename T&gt…
2 ответа

Вызывает ли swap() неопределенное поведение?

Я пытаюсь понять условия на std::swap из [C++11: utility.swap]. Шаблон определяется как template <typename T> void swap(T &, T &) (плюс некоторые noexcept детали) и как результат "обмена значениями, хранящимися в двух местах". У следую…
3 ответа

lvalue в rvalue неявное преобразование

Я вижу термин "преобразование lvalue в rvalue", используемый во многих местах по всему стандарту C++. Насколько я могу судить, такое преобразование часто выполняется неявно. Одна неожиданная (для меня) особенность формулировки из стандарта состоит в…
1 ответ

Преобразование Lvalue в rvalue в [expr.ref]/2

[expr.ref] / 2: Для первой опции (точка) первое выражение должно быть glvalue, имеющим полный тип класса. Для второй опции (стрелка) первое выражение должно быть значением, имеющим указатель на полный тип класса. Выражение E1->E2 преобразуется в эк…
25 мар '17 в 12:38
2 ответа

Я думаю, что я мог придумать пример rvalue типа массива

C++03 §4.2 N°1: Значение l или значение типа "массив N T" или "массив неизвестной границы T" может быть преобразовано в значение типа "указатель на T". Результатом является указатель на первый элемент массива. Что меня смущало в этом утверждении дол…
30 окт '10 в 10:00
3 ответа

Всегда ли правильный операнд присваивания преобразуется в r-значение?

Я хотел бы получить разъяснения по этому конкретному случаю: class Test { Test& operator=(const Test& copy) { ... } Test() = default; } Test a; Test b; b = a; //Is "a" converted to an rvalue? "a" является lvalue, однако теперь это правый опе…
25 апр '18 в 12:34
1 ответ

Вызывает ли сравнение между Lvalue и литералом преобразование Lvalue в Rvalue?

Я задал этот вопрос: static_assert из const Переменная И, очевидно, это сводится к вопросу, преобразовывается ли lvalue с плавающей запятой в r для сравнения? Итак, в этом коде происходит преобразование lvalue в rvalue? const float foo = 13.0F; stat…
27 окт '17 в 17:32