现在的位置: 首页 > 综合 > 正文

C++基础语法

2013年03月02日 ⁄ 综合 ⁄ 共 1100字 ⁄ 字号 评论关闭
[Const用法总结,整理]
一、const的普通变量的修饰使用;
  限定一个变量不允许被改变,应该为只读变量。
 下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?
  typedef char * pStr;
  const pStr p2 = string;
  p2++;  //错误
 	char *pstr = "abc";
	pstr[0] = 'd'; //错误
	const char *p1 = string;
  p1++;
    答案与分析:
    1)、"abc"字符串常量,编译器为字符串常量开辟常量空间,且不允许对它进行修改,因此pstr[0]='d' ;是错误的,访问内存非法。
    2)、const char *pm; 限定*pm不可变,当然pm是可变的,因此问题中p1++是对的。const newType m; 限定m不可变,问题中的charptr就是一种新类型,因此问题中p2不可变,p2++是错误的。所以对类型重定义后的const修饰要格外注意。LPSTR,等一些默认的自定义数据类型声明常量时。指针常量与常量指针的区别方法:

沿着*号划一条线,

如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量

二、const修饰函数参数及函数返回值

它表示函数体中不能修改参数的值(包括参数本身的值或者参数其中包含的值)。它可以很好保护调用者传入的参数不被修改。 

[注意]:参数const通常用于参数为指针或引用的情况,且只能修饰输入参数;若输入参数采用“值传递”方式,由于函数将自动产生临时变量用于复制该参数,该参数本就不需要保护,所以不用const修饰。

[总结]:对于非内部数据类型的输入参数,因该将“值传递”的方式改为“const引用传递”,目的是为了提高效率。例如,将void
Func(A a)改为void Func(const A &a);

对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解性。例如void
Func(int x)不应该改为void Func(const int &x);

三、const在类中的应用

 类成员函数中const的使用 
一般放在函数体后,形如:void fun() const; 
任何不会修改数据成员的函数都因该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其他非const成员函数,编译器将报错,这大大提高了程序的健壮性。const修饰的函数,为只读属性的函数,不允许任何修改类属性值的函数。

抱歉!评论已关闭.