返回对犰狳矢量元素的引用
Return a reference to a Armadillo vector element
我很难确定如何返回对犰狳载体元素的引用。
例如
arma::vec3 v = arma::zeros(3);
v.at(0) = 1; // works as expected, surely this means the at() method returns a reference?
但是,这不会编译:
struct Custom {
arma::vec3 v;
double& x() { return v.at(0) }
}
Custom custom;
custom.x() = 1;
错误如下:
错误:从类型"const Double"的表达式初始化类型"double&"的引用无效
我认为这是因为 at() 返回副本而不是引用,但是前面的示例如何工作?
我相信这可能是因为返回的犰狳胶水类型而不是真正的"双",但我找不到任何关于这些的文档,所以我不确定如何使用它们。
答
以下方法有效,提供对矢量元素的"类似引用"命名访问。
inline double x() const { return at(0); }
inline double& x() { return at(0); }
inline double y() const { return at(1); }
inline double& y() { return at(1); }
inline double z() const { return at(2); }
inline double& z() { return at(2); }
inline const arma::subview_col<double> xy() const { return rows(0,1); }
inline arma::subview_col<double> xy() { return rows(0,1); }
at(0)
几乎肯定返回一个代理对象,可以转换为double
,或者被分配一个double
,但实际上不是一个引用。这可能是为了避免悬而未决的引用,或者允许高效存储稀疏矩阵。不幸的是,犰狳的文档在语义上非常安静,但它没有指定at
返回引用。
这表明不鼓励您返回引用。有没有另一种方法可以实现你想要的?
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 设计将引用元素移动到开头的数据结构.C++
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 将新元素添加到列表中,并返回对该元素的引用?
- 如何告诉自动推断向量<bool>元素的非引用类型
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 通过引用传递时访问std::vector的元素
- 如何取消引用和打印指针数组的每个元素?
- 如何从模板获取常量矢量元素的引用
- 调整大小后保持对矢量元素的引用有效
- 取消引用C++中的指针元素
- 在这种情况下,如何返回对数组中元素的引用?
- C++ - 返回对矢量元素的引用
- 引用保留向量中的第一个元素
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 如何理解取消引用指向数组的指针会获取指向元素的指针
- 如何将一个向量的元素引用复制到另一个向量?
- 通过[]运算符返回矢量元素引用