const 学习

int b=500;                              
cost int *a=&b;                         (1)
int const *a=&b;                       (2)
int* const a=&b;                        (3)
const int* const a=&n;                  (4)

 

  1. 情况(1)

如果const位于  *  星号号的左边,代表着const是用来修饰指针指向的变量,即指针指向为常量。

如果const位于  *  星号号的右边,代表着const是用来修饰指针本身,即指针为常量。

所以说(1)和(2)的情况是一样的,都是代表着指针指向的内容为常量,不可以修改。这种情况下不允许对内容进行更改操作。

举个栗子:

如果a是一名仓库保管员,他进入的仓库,里面的货物(*a)是他无法移动的,仓库里是什么就是什么,他就是个看仓库的。

int b=500;
const int *a=&b;
*a=600;       //错误

他不可以改变货物,但是货物可以改变啊。因此,可以改变货物的值。

int b=500;
const int *a=&b;
b=600;
cout<<*a<<endl;   //得到600; 

还有一种改变*a的方法是a指向别处。

	const int *a;
	int b = 34;
	int c = 345;
	a = &b;
	a = &c;
	cout << *a << endl;

2.情况(2)

情况(2)与情况(1)相同。

3,情况(3)

情况(3)为指针本身为常量,这种情况下不允许指针本身进行更改操作,而指针所指向的内容不是常量。

此外,定义的同时必须进行初始化。

	 /*int * const a;*/ ///错误
	int b = 34;
	int c = 345;
	int * const a = &b;
	*a = 600;

	cout << *a << endl;

举个栗子:

  如果a是一名仓库的保管源,他只能进入指定的仓库,而不能进入其他的仓库(a++是错误的),但是这个仓库的货物(*a)是可以移动的,(*a=600是正确的)。

4.情况(4)

这个仓库保管员智能去,特定的仓库,并且仓库里的货物不能去改变。

接下来聊一聊const函数是什么?

  我们定义的类的成员函数中,常常有一些成员函数不能改变类的数据成员。也就是说这些函数都是“只读”函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数加上“const”进行标识,可以调高程序的可读性。其实,他还可以改变可靠性。当函数进行修改数据,会按错误处理。

一些成员函数修改对象。

	void printf::SetPr(int x, int y)
	{
		xval = x;
		yvl = y;
	}

为了使成员函数的意义更加清楚,我们在不可不改变对象的成员对象的成员函数的函数原型加入const。

	class Point
	{
		int xval;
		int yval;
	public:
		int Getvay() const
		{

		}
		int Point::Getvay() const
			//关键字 必须用同一样的方式,否则编译器会认定为两个函数

		{
			return yval;
		}
	};

如果Getval()试图任何方式去改变yval或调用另一个非const成员函数,编译器会给出错误的信息。

 

 

const与#define相比较有什么不同

    c++语言可以用const定义常量,也可以用#defineconst定义常量,但是前者比较后者有更多的优点?

  • const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者进行字符替换,没有类型检查,还有意料不到的错误。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值