我想我并不真正了解引用背后的内容,我很乐意了解更多关于这些的信息。
我正在编写一个数学“向量”类来为数值模拟做基本的线性代数。在我确信不再使用外部库之前,我一直在使用 Eigen。我的问题很简单:
- 我声明了向量并设置了它的 3 个类型的组件
Scalar
(这些是双精度的)。当我重载运算符时,我可以用我的向量做数学运算,但这超出了我的问题范围。 - 我想通过与 Eigen 一起使用的函数调用运算符 () 访问对象的第 i 个组件:
myVector(0) = 0.0 ;
或Scalar d = myVector(0)+1.0 ;
根据我对参考资料的理解,这个解决方案应该有效:
class mtnVector {
public:
typedef double Scalar;
Scalar data [3];
(setters, math, etc...)
inline Scalar & operator() (const int i) const {
return data[i] ;
}
};
但是 g++ 说它不喜欢我实现它的方式,并在引用处确认我 s***:
Vector.h:185: error: invalid initialization of reference of type ?double&? from expression of type ?const double?
从我的角度来看,非常奇怪的是,如果包含数据的数组Scalar * data
在类构造时被动态设置()(使用 new 运算符),则代码编译得很好。但我没有看到动态设置数据持有者的意义。
我不需要 const 来重载函数调用运算符,但我接受它。