类模板的作用:
1:增加类之间代码的通用性,例如:Point<int>, Point<float>, Point<double>
2:inline的作用,内敛函数; 建议编译器把函数内的内容,放到调用时执行;inline
关键字是一种对编译器的建议(注意只是建议,编译器最终是否真正内联函数由编译器自行决定),用于提示编译器将该函数的代码在调用点处展开,而不是像普通函数那样进行常规的函数调用(涉及压栈、跳转、返回等操作)例如
inline int add(int a, int b ) { return a+b;}
int result = add(3, 5);
// 就相当于调用 int result = 3+5 ; 对于简单的函数非常有用能提高效率
3:======= const 的作用 ======
// 1:PoseGraph2D* const parent_; 和 const PoseGraph2D* parent_; 的区别
//***** PoseGraph2D* const parent_; *****
指针本身是常量:
这里的 const 关键字修饰的是指针 parent_ 本身,而不是指针所指向的对象。
这意味着 parent_ 指针在初始化之后,不能再指向其他对象。
PoseGraph2D* const parent_ = new PoseGraph2D();
// 以下操作会导致编译错误,因为 parent_ 指针本身是常量
parent_ = new PoseGraph2D();
parent_->someMember = 42; // 假设 someMember 不是 const 成员,这是允许的
//**** const PoseGraph2D* parent_; ****
指针所指向的对象是常量:
这里的 const 关键字修饰的是指针 parent_ 所指向的 PoseGraph2D 对象,而不是指针本身。
这意味着不能通过 parent_ 指针修改其所指向的 PoseGraph2D 对象的成员。
const PoseGraph2D* parent_ = new PoseGraph2D();
// 以下操作会导致编译错误,因为 parent_ 指向的对象是常量
parent_->someMember = 42;
parent_ = new PoseGraph2D(); // 这是允许的,因为指针本身不是常量
//2: const 在函数前 和 函数后的区别
结论: 在函数前, 表示返回值不能被修改; 在函数后, 表示改函数不会修改任何成员变量和调用任何非const 的成员函数;
//3: 函数内的 const 修饰成员变量 void printValue(const int& val) {}
这个表示 val 在函数内不能被修改,同时传入引用可以避免拷贝带来的耗时