Описание тега 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…
29 янв '18 в 02:13
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-ссылки могут использоваться с функциями, …
13 авг '15 в 07:12
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, чтобы убедиться, что он будет …
27 мар '14 в 10:59
2
ответа
Путаница связывания значений в C++
У меня есть три вызова функций, которые, по моему мнению, должны рассматриваться (примерно) одинаково, но, очевидно, это не так. Я пытаюсь понять, почему один из трех не компилируется (g++ -std= C++0x). // Minimal example to reproduce a compile bug …
13 янв '12 в 13:57
3
ответа
Преобразование lvalue в rvalue массива в ISO C
C++ ANSI ISO IEC 14882 2003 Приложение C.1 (стр. 668): Изменение: результат условного выражения, выражения присваивания или выражения запятой может иметь значение lvalueОбоснование: C + + является объектно-ориентированным языком, уделяющим сравнител…
17 окт '10 в 12:15
1
ответ
Понимание примера преобразования lvalue в rvalue
Мне трудно понять, как этот код (пример из проекта стандарта C++14 [conv.lval]) вызывает неопределенное поведение для g(false), Почему constexpr сделать программу действительной? Кроме того, что означает "не доступ y.n"? В обоих звонках g() мы возвр…
13 фев '15 в 18:34
5
ответов
Произойдет ли преобразование lvalue в rvalue?
Стандарт C++ (4/5) преобразование lvalue в rvalue не выполняется для операнда унарного оператора &. Например: int x; int *p = &x; В приведенном выше случае, являются p являются &x оба значения? или какой будет подходящий пример? Редактироват…
13 дек '11 в 11:41
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>…
19 фев '17 в 15:44
2
ответа
Вызывает ли swap() неопределенное поведение?
Я пытаюсь понять условия на std::swap из [C++11: utility.swap]. Шаблон определяется как template <typename T> void swap(T &, T &) (плюс некоторые noexcept детали) и как результат "обмена значениями, хранящимися в двух местах". У следую…
20 июн '14 в 21:26
3
ответа
lvalue в rvalue неявное преобразование
Я вижу термин "преобразование lvalue в rvalue", используемый во многих местах по всему стандарту C++. Насколько я могу судить, такое преобразование часто выполняется неявно. Одна неожиданная (для меня) особенность формулировки из стандарта состоит в…
31 дек '13 в 01:52
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