视觉SLAM ch3代码总结 (三)

(1)重载运算符<< 和  >>

为什么要重载运算符?

C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。

语法格式如下

<返回类型> operator <运算符符号>(<参数>)
{
	<定义>;
}

举个栗子 重载运算符<

struct node{
    double x,y;
};

bool operator <(const node &a, const node &b ){
    return a.x < b.x && a.y < b.y ;
}

重载运算符以后就可以比较自定义数据类型a和b的大小了

不懂的话可以参考下面文章 讲的很详细

C++中运算符的重载 - ZhiboZhao - 博客园 (cnblogs.com)

  (2)关于 auto

auto c = quat.q.coeffs();

auto的原理就是根据后面的值,来自己推测前面的类型是什么。

auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。

注意点:
1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)

2.函数和模板参数不能被声明为auto(原因同上)

3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid

4.定义在一个auto序列的变量必须始终推导成同一类型

示例:

std::vector<std::string> ve;

std::vector<std::string>::iterator it = ve.begin();

 我们可以用atuo来代替那个初始化类型:

auto it = ve.begin();


 for(auto i : v)
//c++11的新特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素。
for(auto count : counts)
//意思是将 counts 容器中的每一个元素从前往后枚举出来,并用 count 来表示,

 关于c++11新特性有博主总结过,遇到的可以去查看相关内容

c++11新特性,所有知识点都在这了! - 知乎 (zhihu.com)

详细代码参考下面文章

视觉SLAM十四讲CH3代码解析及课后习题详解_nudt一枚研究生-CSDN博客

上一篇:JSP指令和JSP动作


下一篇:通过rcurl抓取网页数据