const的用法

const主要是用来防止定义的对象再次被修改,定义对象变量时要初始化变量

const可用于修饰变量指针函数参数和返回值类数据成员类成员函数对象

(1)修饰变量

用于定于常量变量,这个变量在后面就不可被修改

const int Val = 10;

 //Val = 20; //错误,不可被修改

(2)修饰指针

主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本身为常量;

①指向const变量的指针:

②const指针

const int *ptr;   //*ptr为常量;
 
int const *ptr;   //*ptr为常量;
 
int* const ptr;   //ptr为常量;
 
const int * const ptr;   //*ptr、ptr均为常量;

(3)修饰函数参数和返回值

保护传参时参数不被修改:如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改,则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const保护

void  fun1(const int &val)
{
     //val = 10; //出错
}

void fun2(int &val)
{
   val = 10; //没有出错
}

void main()
{
   int a = 2;
   int b = 2;
   fun1(a); //因为出错,这个函数结束时a的值还是2
   fun2(b);//因为没有出错,函数结束时b的值为10
}

使用引用传入参数提高了效率,如果按值传递的话,函数中得创建临时变量,将这些值复制一遍,引用则不用。如果按值传入参数,就不需要const修饰。

修饰函数返回值,防止返回值被修改

(4)修饰类成员变量

使用const修饰的变量必须初始化,在类中又不能在定义时初始化,

初始化const int类型(没有static),在类的构造函数中初始化列表中初始化。

#include<iostream>
using namespace std;
class Test
{
public:
	const int i;
	int m;
	//const int i = 10;//错误

	Test(int x):i(10)
	{
		m = x;
	}
};

int main()
{
	Test t(15);
	Test s(20);
	cout << t.i << " " << t.m;
}

 在这个程序中,i 是一个常量数据成员,在每个对象中它的独立副本将会出现,因此它使用构造函数对每个对象进行初始化。一旦初始化,它的值就不能改变

(5)修饰类成员函数

防止修改非static类成员变量,不会修改对象中的数据成员

class
{
 public:
     void fun() const //加const修饰
    {
     a = 10; //出错,不可修改非static变量
     b = 10; //对,可以修改
    }
 private:
  int  a ;
  static int b;
}

(6)修饰对象

当一个对象被声明或使用const关键字创建时,它的数据成员在对象的生命周期中永远不会被改变。

(7)const定义的对象变量只能作用于这个程序该C/C++文件,不能被该程序的其他C/C++文件调用,

 如file1.cpp中 const int val;

 在file2.cpp中, extern intval; //错误,无法调用,

要想const定义的对象变量能被其他文件调用,定义时必须使用extern修饰为

extern const int val;

非const变量默认为extern,要是const能被其他文件访问必须显示指定为extern
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值