读高博的slam代码,看到以下一段有点懵
// 代价函数的计算模型
struct CURVE_FITTING_COST
{
CURVE_FITTING_COST ( double x, double y ) : _x ( x ), _y ( y ) {}
// 残差的计算
template
bool operator() (
const T* const abc, // 模型参数,有3维
T* residual ) const // 残差
{
residual[0] = T ( _y ) - ceres::exp ( abc[0]*T ( _x ) *T ( _x ) + abc[1]*T ( _x ) + abc[2] ); // y-exp(ax^2+bx+c)
return true;
}
const double _x, _y; // x,y数据
};
经查阅资料
- C++ 中结构体中也可以包含构造函数和析构函数
- 类中成员变量默认为私有,而结构体中默认为公有
对于这行
// 是构造函数
CURVE_FITTING_COST ( double x, double y ) : _x ( x ), _y ( y ) {}
// 冒号后面跟的是赋值,这种写法是C++的特性。
A( int aa, int bb ):a(aa),b(bb){}
// 相当于
A( int aa, int bb ){
a=aa;
b=bb;
}
构造函数后加冒号 → 初始化表达式
- 初始化 const 成员
- 初始化引用成员
- 当调用基类的构造函数,而它拥有一组参数时
- 当调用成员类的构造函数,而它拥有一组参数时。
复习 : 定义变量并初始化有两种形式
- 赋值运算符赋值 int a=10;
- 括号赋值 int a(10);
括号赋值只能在变量定义并初始化中,不能用在变量定义后再赋值
关于运算符重载, 引用这篇博客 blog.csdn.net/lishuzhai/article/details/50781753
-
大多数运算符可以通过成员函数和非成员函数进行重载; 但是下面这四种运算符只能通过成员函数进行重载:
= 赋值运算符,()函数调用运算符,[]下标运算符,-> 通过指针访问类成员的运算符。
-
关于const blog.csdn.net/hjwang1/article/details/78541505



