从OpenCV源码学习cpp_const
来源:互联网 发布:ubuntu 列出所有用户 编辑:程序博客网 时间:2024/05/22 08:17
cpp中的const的用法,似乎有些复杂。const告诉编译器,我希望指定某种不被修改的东西,而具体是什么东西不被修改,则根据const的位置决定。
template<typename _Tp, int cn> class Vec : public Matx<_Tp, cn, 1>{public: ... Vec mul(const Vec<_Tp, cn>& v) const; // 1 /*! element access */ const _Tp& operator [](int i) const; // 2 _Tp& operator[](int i); ...};
修饰函数的参数类型
Vec mul(const Vec<_Tp, cn>& v) const; // 1
这很好理解,Vec前面的const,修饰了v,v在这个方法内部是不可改变的。
修饰类的成员函数
Vec mul(const Vec<_Tp, cn>& v) const; // 1
const修饰的mul方法,使得这个方法内部是无法修改当前对象(this指针指向的对象)的数据成员。实际上,这个const的实质作用效果是,把this指针变成const型,所以this指向的成员变量也都带上了const的约束。
修饰成员函数的返回值类型
const _Tp& operator [](int i) const; // 2
当函数返回的变量是const时,就需要在返回值类型前面添加const修饰符。这种情况下这个const如果省略,会报错,因为返回值本身已经是const型。在这个例子中,返回值是成员变量,由于this已被const修饰,所以这里的const不能省略。
当然如果返回值不是const,也可以添加const,把返回值变成const型。
另外
const _Tp& operator [](int i) const; // 2_Tp& operator[](int i);
常常这两句话同时出现,什么时候决定调用哪个呢?取决于this指针是不是const型。
const Vec v1;Vec v2;
v1的this指针是const型,v1[i]会调用第一句;而v2不是,v2[i]会调用第二句。换一个角度讲,只有同时定义了这两句话,才可以自由地选择是否使用const修饰对象,同时不影响使用[]操作符。
0 0
- 从OpenCV源码学习cpp_const
- 从OpenCV源码学习cpp_explicit
- 从OpenCV源码学习cpp_virtual
- 从Github源码安装Opencv
- 【OpenCV】从源码编译安装OpenCV
- 如何学习opencv源码
- OpenCV从源码安装到Ubuntu16.04
- opencv学习 卡尔曼源码
- 从Zero学习String源码
- 从源码学习自定义View
- 学习OpenCV(一)从Mat讲起
- 【从零学习openCV】opecv操作像素
- 学习opencv项目从摄像机读入数据
- 【从零学习openCV】ubuntu+openCV+qt安装配置
- OpenCV深入学习(8)--calcHist源码分析
- opencv中HOG源码学习笔记
- opencv学习:模板匹配源码解读
- 【学习OpenCV】跟踪源码及常见问题
- 安卓圆形TextView实现方法
- 链表之一元多项式加法
- 我的第一家实习公司“嘉兴聚变科技有限公司”
- 5-14 电话聊天狂人
- Android的实现文字渐变效果和歌词进度的效果
- 从OpenCV源码学习cpp_const
- 一种跨域单点登录的解决办法
- model设置属性的封装(存取文件数据,为cell传数据)
- C语言0728
- 对Socket CAN的理解(1)——【CAN总线原理】
- Android 获取View的 left、right、top、buttom、以及x、y坐标的方法
- 对Socket CAN的理解(2)——【Socket的原理及使用】
- 类型转换
- 等比数列二分求模