Свързани въпроси 'rvalue-reference'
Напред или Преместване
Това валидна употреба ли е на движение и напред? Еднакви ли са f3 и f4? Опасно ли е да го правите? Благодаря ви!
#include <utility>
class A {};
A f1() {
A a;
return a; // Move constructor is called
}
A f2(A&& a) {...
174 изгледи
schedule
26.09.2022
C++11 шаблонна функция с извикване на параметър rvalue
В някакъв клас O имам шаблонна функция test2 :
struct A{int value;};
struct O{
A value;
template<typename Args>
static void test2(Args &&args){
std::cout << std::endl << "!!!" <<...
224 изгледи
schedule
25.09.2022
Има ли смисъл да се използва идиома за преместване и размяна на преместваем и некопируем клас
Ако имам клас като
class Foo{
public:
Foo(){...}
Foo(Foo && rhs){...}
operator=(Foo rhs){ swap(*this, rhs);}
void swap(Foo &rhs);
private:
Foo(const Foo&);
// snip: swap code
};
void swap(Foo& lhs, Foo&...
2001 изгледи
schedule
04.10.2022
Защо не се извиква конструкторът за преместване?
Аз съм нов в C++ и се опитвам да разбера препратките към rvalue и семантиката на преместване.
Написах прост клас, Class, който включва метод, fun, който създава екземпляр на класа в своето тяло и го връща. Класът има конструктор за копиране,...
43 изгледи
schedule
04.10.2022
Разбиране на Rvalue Reference
Това недефинирано поведение ли е? Ако не, какво е поведението?
// In some external library with, say, header "a.h"
void f(int &&x) {
x = 5; // Which memory does this assignment apply to?
}
#include "a.h"
int main() {
f(7);
// At...
81 изгледи
schedule
10.10.2022
Предаване на Lvalue към параметър на RValue
Исках да знам как е възможно това?
template<typename T>
void Test(T&& arg)
{
arg = 14;
}
int a = 23;
Test(a);
Въпросът ми е, че функцията Test изисква аргумент от тип Rvalue, но изглежда, че приема и параметър от тип...
252 изгледи
schedule
10.10.2022
Може ли някой да обясни препратките към rvalue по отношение на изключенията?
Да кажем, че имам този клас изключения:
struct MyException : public std::exception
{
MyException(const std::exception &exc) : std::exception(exc)
{
cout << "lval\n";
}
MyException(std::exception &&exc) :...
1310 изгледи
schedule
19.10.2022
Перфектно препращане на член на обект
Да предположим, че имам две struct s:
struct X {};
struct Y { X x; }
Имам функции:
void f(X&);
void f(X&&);
Как да напиша функция g() , която приема Y& или Y&& , но перфектно препраща съответно X&...
1228 изгледи
schedule
30.10.2023
Счита ли се за безопасно получаването на адрес на препратка към rvalue преди преместване?
Играя си около Move Semantics и [r|l]value references, за да науча как да ги използвам в програми от реалния свят. Помислете за следния код:
// Item is a heavy class having move ctor and assignment but no copy.
std::map<std::string, Item*>...
1164 изгледи
schedule
10.11.2022
Компилаторът не се оплаква, когато vector‹char›&& е обвързан с vector‹char›&
Използвам Visual Studio 2013 Express.
class B{
public:
vector<char>& a;
int& b;
B(vector<char>& i,int& c) :a(i),b(c) {}
};
int main(){
int l=3;
vector<char> h;
shared_ptr<B> bb (new...
122 изгледи
schedule
28.10.2022
Има ли случаи на употреба за std::forward с prvalue?
Най-честата употреба на std::forward е да, добре, усъвършенствате препращане на препращаща (универсална) препратка, като
template<typename T>
void f(T&& param)
{
g(std::forward<T>(param)); // perfect forward to g
}...
969 изгледи
schedule
05.01.2024
Претоварване на цифров векторен оператор + референтен параметър rvalue
Имам класа шаблон за числови вектори по-долу (вектор за числени изчисления). Опитвам се да направя възможно писането на D=A+B+C , където всички променливи са Vector обекти. A , B и C не трябва да се променят. Идеята ми е да използвам...
3443 изгледи
schedule
03.02.2024
init-capture за препратка към rvalue във Visual Studio 2013
Искам да използвам .net System.Threading.Tasks.Task.ContinueWith в C++, така че пиша следната функция..
#include <iostream>
#include <functional>
#include <future>
template <typename Func, typename Ret>
auto...
979 изгледи
schedule
30.01.2024
Връщане на rvalue - какво не е наред с този код?
Попаднах на следния кодов фрагмент
std::string&& test()
{
std::string m="Hello";
return (std::move(m));
}
int main()
{
std::string&& m = test();
}
Разбирам, че горният код е неправилен и опасен, но не знам защо....
186 изгледи
schedule
22.11.2023
приспадане на референтния шаблон на rvalue
template<class U>
void f( U && v)
{
std::cout << typeid(v).name() << "\n"; //'int' in both cases
if( boost::is_same<int&&,U>::value )
{
std::cout << "reach here\n"; //only with...
565 изгледи
schedule
12.04.2024
Rvalue препратки и клас дизайн
Опитвах се да оценя как препратките към rvalue влияят на дизайна на класа. Да кажем, че имам съществуващ клас, както е показано по-долу
class X
{
string internal;
public:
void set_data(const char* s)
{
internal = s;
}
..
..
.....
181 изгледи
schedule
24.04.2024