Вопросы по теме 'rvalue'

Почему ссылка C++0x rvalue не используется по умолчанию?
Одной из замечательных новых возможностей нового стандарта C++, C++0x, являются ссылки на rvalue. Ссылка rvalue похожа на ссылку lvalue (обычную), за исключением того, что она может быть привязана к временному значению (обычно временное значение...
3905 просмотров
schedule 11.10.2022

Если функции возвращают целое число, можно ли ему присвоить целое число?
Если функция возвращает int, может ли она быть назначена значением int? Я не вижу особого смысла присваивать значение функции. int f() {} f() = 1; Я заметил, что если функция возвращает ссылку на int, все в порядке. Это ограничено только...
6788 просмотров
schedule 16.07.2023

Почему оператор предварительного приращения дает rvalue в C?
В C++ оператор предварительного приращения дает lvalue, потому что возвращается сам увеличенный объект, а не копия. Но в C это дает rvalue. Почему?
2101 просмотров
schedule 14.06.2022

Что такое decltype (0 + 0)?
(Запрошено ответом .) Учитывая N3290, §7.1.6.2p4, где элементы списка не пронумерованы, но пронумерованы здесь для нашего удобства: Тип, обозначенный decltype (e), определяется следующим образом: если e - это выражение id без...
1307 просмотров
schedule 03.02.2022

С++ 03. Проверяйте rvalue-vs-lvalue во время компиляции, а не только во время выполнения
В C++03 Foreach Boost, используя этот интересный метод , может обнаруживать во время выполнения независимо от того, является ли выражение lvalue или rvalue. (Я обнаружил это с помощью этого вопроса StackOverflow: Rvalues ​​в C++03 ) Вот...
1931 просмотров
schedule 19.03.2022

C++11: Почему разрешено присвоение rvalue?
Насколько я понимаю, причина, по которой опасно возвращать ссылки rvalues ​​из функций, связана со следующим кодом: T&& f(T&& x) { do_something_to_T(x); return static_cast<T&&>(x); } T f(const T& x) { T x2 = x;...
4243 просмотров
schedule 14.05.2022

Получение адреса rvalue
class MyClass { public: MyClass(int a) : a(a) { } int a; }; #include <iostream> void print(MyClass* a) { std::cout << a->a << std::endl; } int main() {...
1655 просмотров
schedule 21.08.2023

Когда я должен выбрать копирование, а не передачу аргумента по константной ссылке?
Возможный дубликат: является передача по значению является разумным значением по умолчанию в C++11? Я читаю Хотите скорость? Pass by Value. Дэйв Абрахамс об устранении копирования и RVO. И мне интересно, зачем нам копия элизии?...
2029 просмотров
schedule 27.01.2024

ссылка rvalue и литерал
Рассмотрим код template <typename... Args> void foo (Args&& ...) { } template <typename... Args> void bar (Args&& ... args) { foo (std::forward (args)...); } int main () { bar (true); } ~...
219 просмотров
schedule 24.03.2024

Передача значения r в качестве неконстантной ссылки (предупреждение VS C4239)
То, что я хочу сделать (используя лямбду С++), эффективно: std::vector<MyType> GetTheArray () {return something;} const auto DoSomething = [](std::vector<MyType> & array) { //Some processing that involves either sorting the...
3036 просмотров
schedule 08.02.2023

Нужно ли мне снова использовать std::move?
Для приведенного ниже кода я хочу использовать std::move для повышения эффективности. У меня есть две функции, первая функция использует std::move, а вторая функция просто вызывает первую функцию. Итак, нужно ли мне снова использовать std::move в...
129 просмотров
schedule 30.01.2023

Понимание вывода аргументов шаблона с помощью rvalue/lvalue
Это продолжение шаблон функции не распознает lvalue Давайте поиграем со следующим кодом: #include <iostream> template <class T> void func(T&&) { std::cout<<"in rvalue\n"; } template <class T> void func(const...
1185 просмотров
schedule 11.03.2024

значение типа std::nullptr_t
Раздел 4.10/1 N3797 гласит: Константа нулевого указателя — это целочисленный литерал (2.14.2) с нулевым значением или значением prvalue типа std::nullptr_t. Я думаю, что nullptr является prvalue типа std::nullptr_t . Не могли бы вы...
88 просмотров
schedule 21.05.2024

Построенный временный объект является lvalue?
Предположим, что у меня есть класс с именем Foo с операторами копирования-присваивания, я думал, что это: Foo() = Foo(); не было разрешено, потому что я думал (еще раз извините), что Foo() был rvalue (поэтому я не могу его присвоить), будучи...
338 просмотров
schedule 28.02.2024

С++ - как вернуть prvalue по ссылке?
Поэтому я реализую собственную оболочку массивов, которая позволит передавать их в качестве аргументов функции и возвращать. Однако у меня возникли проблемы с приведением его к собственному массиву, поскольку собственные массивы не могут быть...
541 просмотров
schedule 20.03.2023

Привязка r-значения к ссылке l-значения является нестандартным расширением Microsoft C++.
Недавно я работал над проектом и решил установить ReSharper C++ в Visual Studio. Когда он проанализировал мой код, он выдал кучу новых предупреждений (очевидно, у меня плохие привычки кодирования...). Один из них, который мне потребовалось некоторое...
3055 просмотров
schedule 18.12.2023

Ссылка на целое число и строку
Может кто-нибудь объяснить мне, почему в VC++ 12 string &s = string("this"); работает, но не int &d = int(10); какие операторы вызываются при инициализации неконстантной ссылки. Спасибо.
52 просмотров
schedule 20.02.2023

Проверьте, является ли выражение xvalue или prvalue
Я просто хочу проверить некоторые правила, описанные в cppreference . Легко проверить, является ли выражение lvalue или rvalue. #include <cassert> #include <iostream> template <typename T> bool IsLValue(const char*...
194 просмотров
schedule 09.01.2024

Как программно определить, является ли выражение rvalue или lvalue в С++?
Как лучше всего определить, является ли выражение значением rvalue или lvalue в С++? Возможно, это бесполезно на практике, но поскольку я изучаю rvalue и lvalue, я подумал, что было бы неплохо иметь функцию is_lvalue , которая возвращает true, если...
6967 просмотров
schedule 11.03.2022

путаница, перегружающая функции-члены для rvalue и lvalues
У меня есть следующая установка: struct foo { void bar( ) & { std::cout << "lvalue\n"; } void bar( ) && { std::cout << "rvalue\n"; } ~foo( ) { bar( ); } }; int main( int arg, char **argv ) { foo{...
85 просмотров
schedule 25.04.2024