在下面的代码中,我有一个包含 10 个成员的大向量,可以分为 4 个子向量:
data[10]
P=data[0 to 2]
Q=data[3 to 5]
R=data[6 to 6]
S=data[7 to 9]
由于 vectorR
只有一个成员,我更喜欢直接从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
主文件
#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;
}