美文网首页
通俗易懂讲C++ const必要用法(仅此一版)

通俗易懂讲C++ const必要用法(仅此一版)

作者: Optimization | 来源:发表于2020-06-21 16:07 被阅读0次

关于C++ const 的全面总结(这个链接的字简直不能看,但是内容是好的)

一、ORBSLAM2中const的例子
// 函数中的变量
const int nTimes = vTimestamps.size();
const uchar* center = &image.at<uchar>(cvRound(pt.y), cvRound(pt.x));
const float &fx = pKF->fx;

for(vector<size_t>::const_iterator vit=vIndices.begin(), vend=vIndices.end(); vit!=vend; vit++){...}

// 强制类型转换
const VertexSE3Expmap* v1 = static_cast<const VertexSE3Expmap*>(_vertices[0]);

// 类成员变量中的const
const ORBVocabulary* mpVoc; //初始化类表初始化

static const int TH_LOW; // 类外初始化

//类成员函数(参数和函数):
Vector3d cam_project(const Vector3d & trans_xyz) const;

virtual void oplusImpl(const double* update_);

void AddTextToImage(const string &s, cv::Mat &im, const int r, const int g, const int b);
二、const的使用的一些讲解
1、定义常量

(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。

 TYPE const ValueName = value;
 const TYPE ValueName = value;

(2)将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.

extend const int ValueName = value;
2、指针使用const

(1)指针本身是常量不可变

char* const pContent;

(2)指针所指向的内容是常量不可变

const char *pContent;

(3)两者都不可变

  const char* const pContent;
3、函数中使用const

(1)const修饰函数参数
a.传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const int Var);

b.参数指针所指内容为常量不可变

void function(const char* Var);

c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)

void function(char* const Var);

d.参数为引用,为了增加效率同时防止修改。修饰引用参数时:

void function(const TYPE& Var); //引用参数在函数内为常量不可变

这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.
(2)const 修饰函数返回值
const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。

const int fun1() //这个其实无意义,因为参数返回本身就是赋值。
const int * fun2() //调用时 const int *pValue = fun2();
                          //我们可以把fun2()看作成一个变量,即指针内容不可变。
 
int* const fun3()   //调用时 int * const pValue = fun2();
                          //我们可以把fun2()看作成一个变量,即指针本身不可变。

(3)修饰函数函数

三、总结const

1.要大胆的使用const,这将给你带来无尽的益处。
2.要避免最一般的赋值操作错误,如将const变量赋值,const 只能初始化;
3.const在成员函数中的三种用法(参数、返回值、函数)要很好的使用:
(1)在参数中使用const应该使用引用或指针,而不是一般的对象实例;
(2)不要轻易的将函数的返回值类型定为const(除了重载操作符外一般不要将返回值类型定为对某个对象的const引用);
(3)任何不会修改数据成员的函数都应该声明为const 类型。只能调用const成员函数,其他函数不可以。
4.类内部的常量限制
使用这种类内部的初始化语法的时候,常量必须是被一个常量表达式
初始化的整型或枚举类型,而且必须是static和const形式。
如何初始化类内部的常量:一种方法就是static 和 const 并用,在外部初始化,例如:

class A { public: A() {} private: static const int i; file://注意必须是静态的! };
const int A::i=3;

另一个很常见的方法就是初始化列表:

class A { public: A(int
i=0):test(i) {} private: const int i; }

5.const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。只能调用const成员函数。
例如:

class AAA
{
    void func1();
void func2() const;
}
const AAA aObj;
aObj.func1(); ×
aObj.func2(); 正确

const AAA* aObj = new AAA();
aObj-> func1(); ×
aObj-> func2(); 正确

相关文章

  • 通俗易懂讲C++ const必要用法(仅此一版)

    关于C++ const 的全面总结(这个链接的字简直不能看,但是内容是好的) 一、ORBSLAM2中const的例...

  • C++ const用法

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结...

  • C++ const 用法

    const修饰的是一个常量,常量的意思是不能修改该值,但是可以将常量值赋给变量。 pt是指向const单元的指针。...

  • C++ const用法

    一 修饰类 C++中const修饰类主要包括3个部分:数据成员,成员函数,对象。 数据成员const 修饰类的成员...

  • C++ const用法

    const限定符 在变量前面加上const,也可以创建一个常量。使用const创建常量的一般格式如下: 使用con...

  • C++:const用法

    在C++中用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。如果在编程中确实有某个值保持不变,也就是该...

  • C++中const 关键字的用法(转)

    C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: 上面的...

  • const int = int const?

    根据我的了解, const 这个用法在 c++ 里非常复杂, 看完了 c++ primer 5th 里相关章节...

  • C++中的const成员函数(函数声明后加const)用法详解

    转载请注明出处,尊重智慧!文章来源: C++中的const成员函数(函数声明后加const,或称常量成员函数)用法...

  • const关键字和常量

    注:以下大部分内容来源于 coursera 课程《C++程序设计》 const的用法 定义常量 const 与de...

网友评论

      本文标题:通俗易懂讲C++ const必要用法(仅此一版)

      本文链接:https://www.haomeiwen.com/subject/traoxktx.html