const关键字的用法

一  概述

      被const修饰的变量都是只读的,当你的程序改变其值的时候,编译器会报错。const一般用来修饰变量,函数的参数,返回值和函数本身等。

1.1   修饰变量

	const int a = 10;   //定义一个const的int变量
	const char * p = "hello world"; //const字符串
	char * const p = "hello world"; //const指针p
	const char * const p = "hello world"; //指向const字符串的const指针p
1.2  函数参数
       const只能修饰输入参数:输入参数采用指针传递的时候,使用const可以防止意外改变指针所指的值,比如 void strcopy( char * strdest, const char * strsrc);

       如果参数是值传递的话,那么就不用加上const修饰了,因为值传递的原理是申请一个临时的变量,将参数赋值给该变量,因此对临时变量的操作不会影响到原来变量的值。

      对于非内部数据类型的变量:void func(String a),如果不采用引用传递的话,函数效率很低,会调用函数的构造函数和析构函数来建立一个临时的String对象,加了引用后,如果程序中要改变参数的话,这样是不行的,我们需要加上const,正确的形式为:void func(const String &a)。对于内部数据直接值传递就好了,因为不会有构造函数和析构函数的产生。

1.3  返回值

    (1)如果给采用指针传递的方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能修改,该返回值只能赋值给加了const修饰的同类型指针。

   const char *   GetString(void);

   const char * p = GetString();

  (2) 如果函数采用了值传递的方式,那么不需要加const,因为函数会把返回值复制到外部临时的存储单元中。

   int GetInt(void)   错误的形式:const int GetInt(void)

  (3) 函数采用引用传递的场合不多,这种方式一般只出现在类的赋值函数中,是为了方便连续赋值。

  String  strOne, strTwo, strThree;

   strOne = strTwo = strThree;

 1.4 cosnt成员函数

   任何不会修改数据成员的函数应该声明为const类型,在const函数中修改了成员变量或者调用了非const函数,编译器都会报错。

class Stack
{
public:
	void Push(int a);
	int Pop(void);
	int GetCount(void) const;
private:
	int m_num;
	int m_data[5];
};
int Stack::GetCount(void) const
{
	Push(1);  //非const函数
	++m_num; // 改变成员变量的值
        return m_num;
 }

用好了const可以给你的程序带来很好的健壮性和高效率性


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值