C++里的const变量、const函数、const指针、const数组等

编程入门 行业动态 更新时间:2024-10-07 16:24:22

C++里的const变量、const函数、const指针、const<a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组等"/>

C++里的const变量、const函数、const指针、const数组等

    在C++语言中,有时候需要使用常量,这里的常量是指广义的常量,包括const变量、const函数、const指针、const数组等等。常量,具有只读属性,即一旦已经初始化,就只可读取,无法修改,类似于只读光盘一样,值已经写进常量区,只可读取,无法二次写入。

1 const常量

    const常量,可以是一个整形常量,比如,const int a = 3; 表示a是一个等于3的整形常量,a的值是只读的。

const int    a  = 3;    //整型常量
const float  pi = 3.14  //圆周率pi,单精度常量
const double e  = 2.718 //自然对数e,双精度常量
  • 圆周率pi =3.1415926535897932384626…, 它一个无理数,即无限循环小数,常用三角函数、弧度/角度之间的换算,通常取小数点后2位,即pi≈3.14,可以把pi定义为const,表示不可修改。
  • 自然常数e=2.71828182845904523536…,它也是一个无理数,常用于复利计算、求导等,通常取3位,即e≈2.718,把它定义为const,也是合理的。

2 const函数

    const函数,若它在类中,表示常函数,不能修改类的成员变量。常函数主要用于获取类的属性、特定计算。比如,一个矩形类Shap定义如下:

class Shape
{
public:Shape(int x,int y):m_x(x),m_y(y){}int GetArea() const  //获取面积{return m_x * m_y;}int GetX() const //获取x{return m_x;}int GetY() const //获取y{return m_y;}private:int m_x;int m_y;
};

    int GetArea() const 表示获取矩形的面积,x是宽度,y是高度,那么矩形面积就是 x*y。由于面积不涉及对宽度、高度的修改,只是读取宽度、高度这些属性,所以将GetArea()函数用const修饰,是合理的。

3 const指针与const value

    当const 与*一起修饰变量时,有如下3种情况:

组合pointervalue说明
const int* pNum1地址可变值不可变const修饰的是value
int* const pNum2地址不可变值可变const修饰的是pointer
const int* const pNum3地址不可变值也不可变前一个const Type*,是修饰value;后一个const p是修饰指针
  • 对pointer来说,可变,是指pointer的指向,可以从指向A地址,改成指向B地址;
  • 对value来说,可变,是指value的值,可以更新,比如从10,更新到30;

3.1 const int* pNum1

    const int* pNum1,表示地址可变,值不可变,如下:

    int numA = 10;const  int*      pNum1 = &numA; //value是const的,pointer不是const//1) value是const的,pointer不是const*pNum1 = 20; //编译报错,因为value = *pNum1是const的,不能修改值int numB = 50;pNum1 = &numB; //正常,因为pNum1不是const,可以改变指向,从指向numA,改成指向numB;

    pNum1是一个pointer,而*pNum1是一个value,通过语句const int* pNum1 = &num;,可知: pNum1是一个普通指针,可以改变指向 ;而value = *pNum1是一个常量,不可以修改。

3.2 int* const pNum2

    int* const pNum2 表示值可变,地址不可变,如下:

    int numA = 10;int*   const     pNum2 = &numA; //pointer是const的,value不是cosnt//2) pointer是const的,value不是cosntint numC = 60;pNum2 = &numC; //编译报错,因为pNum2 = pointer,是const,不能修改地址;*pNum2 = 70;   //正常,因为*pNum2 = value,不是const,可以更新值,从10更新到70

    pNum2是一个pointer,而*pNum2是一个value,通过语句int* const pNum2 = &numA; ,可知:
pNum2一个常量指针,不可以修改指向 ;而value = *pNum2是一个变量,可以更新值。

3.3 const int* const pNum3

    const int* const pNum3 表示地址不可修改,值也不可以修改,如下:

    int numA = 10;const  int* const pNum3 = &numA; //value是cost的,pointer也是const//3)value是cost的,pointer也是constint numD = 80;pNum3 = &numD; //编译报错,因为pNum3 = pointer,是const,不能修改地址;*pNum3 = 90;   //编译报错,因为*pNum3 = value,也是const,不能更新值

    pNum3是一个pointer,而*pNum3是一个value,通过语句const int* const pNum3 = &numA;,可知: pNum3是一个常量指针,不可以修改指向;同时,*pNum3也是一个常量,不能更新值。

4 const数组

    当需要把一些固定的元素或者字段,放在一起时,既可以使用枚举,也可以使用const数组。比如,把三原色:red、green、blue,放在一起,形成一个常量数组arry[3]。

const std::string arry[3] = {"red","green","blue"}

更多推荐

C++里的const变量、const函数、const指针、const数组等

本文发布于:2023-11-16 13:36:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1623371.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   指针   变量   函数   const

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!