c ++ 11 — C ++ с использованием xvalue (ссылка на rvalue) в качестве lvalue

В следующем коде у меня большой вектор с 10 членами, который можно разделить на 4 подвектора:

data[10]
P=data[0 to 2]
Q=data[3 to 5]
R=data[6 to 6]
S=data[7 to 9]

С, вектор R только один член, я предпочитаю возвращать Rvalue непосредственно из data, Я хочу сделать эту операцию над этим значением:

x.R()=1983.2+x.R();

как то, что я могу сделать с Q, Но я получаю эту ошибку:

g++ -g -c main.cpp -std=c++11 -larmadillo -DNDEBUG
main.cpp: In member function ‘Super_vector::R_type&& Super_vector::R()’:
main.cpp:38:24: error: cannot bind ‘double’ lvalue to ‘Super_vector::R_type&& {aka double&&}’
return data(6,6);
^
main.cpp: In function ‘int main()’:
main.cpp:52:7: error: using xvalue (rvalue reference) as lvalue
x.R()=1983.2+x.R();
^
make: *** [all] Error 1

main.cpp

#include <armadillo>
#include <iostream>

using namespace std;

typedef arma::vec::fixed<10> x_vec;

class Super_vector
{
public:

x_vec data;

typedef decltype(std::declval<x_vec>().subvec(0, 2)) P_type;
typedef decltype(std::declval<x_vec>().subvec(3, 5)) Q_type;
typedef double R_type;
typedef decltype(std::declval<x_vec>().subvec(7, 9)) S_type;

Super_vector(x_vec data_) :
data(data_)
{
}inline P_type P()
{
return data.subvec(0,2);
}

inline Q_type Q()
{
return data.subvec(3,5);
}

inline R_type&& R()
{
return data(6,6);
}

inline S_type S()
{
return data.subvec(7,9);
}

};

int main()
{
Super_vector x({2,3,5,7,11,13,17,19,23,29});
x.Q()=-x.Q();
x.R()=1983.2+x.R();
x.data.print();

return 0;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]