C中CONST的使用:
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
C中常用:#define 变量名变量值定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理在C++中成为可能引发错误的隐患,于是引入const.
const使用:
1. 用于指针的两种情况:const是一个左结合的类型修饰符.
int const *A; //A可变,*A不可变
int *const A; //A不可变,*A可变
2.限定函数的传递值参数:
void function(const int Var); //传递过来的参数在函数内不可以改变.
3.限定函数返回值型.
const int function(); //此时const无意义
const myclassname function(); //函数返回自定义类型myclassname.
4限定函数类型.
void function()const; //常成员函数, 它不改变对象的成员变量.
-------------------------------------------------------------------------------------
有时const n=21;
有时int Binarysearch(T &x,const int low,const int high);
有时int Find(T &x)const;
int const n=21;//n是常量,不能变,也可以写成const int 21;定义常量时必须有初始的值
int Binarysearch(T &x,const int low,const int high); //其实个人认为这种写法是不好的,应该写成int Binarysearch(cosnt T &x,int low,int high); 一般函数传递引用的时候,如果你不想改变改传递数据的值,那么应该将传递的引用声明为const,不然可以通过x改变你原数据的值,传递引用主要是为了节省传递实参的时间.而把low和high声明为const根本没有意义,而传递过来的实参也不一定要是const
int Find(T &x)const; //这样的函数用在类中,函数后面加const是不能改变类中成员的值
对楼下的问题:
int Binarysearch(T &x,const int low,const int high);和
int Binarysearch(const T &x,int low,int high);
是不一样的,第一个你传递参数x,如果在这个函数中改变了x,因为x是引用,是别名,改变了它的值它对应的值也要改变,加了const就不会出现这种情况,而吧low和high声明为const就没有意义(因为low 与 high 根本不是引用,即不是同一个变量);二把引用声明为const主要原因就是为了防止间接改变传递给函数的那个值。
第二个,你可以查一下MSDN,string类中的empty()函数的原型为:bool empty() const;
string str;str.empty();有错吗?empty()函数只是不能改变string类中数据成员的值才声明为bool empty() const;的当然
const string str;str.empty();也没有错