在C++中const代替#define的操作,当定义一个const时必须附一个值给它:const int size = 100;通常C++编译器不为const创建存储空间,相反它把这个定义保存在符号表里。
常见const的几种定义区别:
1 void(const int i) 2 { 3 I++;//错误 4 } 5 6 //为了是理解更加直观应该在函数内部用const限定,避免调用者混淆。 7 8 void(int ic) 9 { 10 const int& I = ic; 11 I++;//错误 12 }
6.返回const值
对于内建类型来说,返回值是否是一个const,并不重要。例如
1 int f() 2 { 3 return 1; 4 } 5 6 const int g() 7 { 8 return 1; 9 } 10 11 int main() 12 { 13 const int j = f(); 14 int k = g(); 15 } 16 17 都可以正常运行;
7.传递和返回地址
1 void t(int* i) { } 2 3 void u(const int* cip) 4 { 5 *cip = 2;//错误,指针指向的内容不可改变。 6 int i = *cip; //正确 7 int* ip2 = cip;//错误,Int* ip2没有const限制, 8 } 9 10 const char* v() 11 { 12 return “result of fun”; 13 } 14 15 const int* const w() 16 { 17 sataic int I; 18 return &I; 19 } 20 21 int main() 22 { 23 int x =0; 24 int* ip = &x; 25 const int* cip = &x; 26 t(ip); //正确 27 t(cip);//错误,不能被更改 28 u(ip); //正确 29 u(cip);//正确 30 char* cp = v();//错误 31 const char* cpp = v();//正确 32 int* ip2 = w();//错误 33 const int* cip2 = w();//正确 34 const int* const cip2 = w();//正确 35 }
8.类中的const
为了保证一个类对象为常量,const成员函数只能对于const对象调用。如果声明一个const类型的成员函数,则该成员函数可以被一个const对象所调用。一个没有被明确声明为const的成员函数被看成是将要修改对象中数据成员的函数,且编译器不允许被const对象所调用。定义const类型的成员函数不是const int func();这个只是表示函数的返回值为const,正确的const成员函数为int func() const;这个格式才表示函数为const类型,才能被const对象调用。
1 class X 2 3 { 4 int i; 5 public: 6 X(int ii); 7 int func() const; 8 }; 9 10 X::X(int ii) :i(ii) { } 11 int X::func() const //关键字const必须同样出现在定义里,不然会认为不是一个函数 12 { 13 return I; 14 } 15 16 int main() 17 { 18 X x1(10); 19 Const X x2(20); 20 X1.func(); 21 X2.func(); 22 //一个const成员函数可以被const对象和非const对象调用,但是成员函数并不会默认为const 23 //在使用中,不用于修改对象数据成员的任何函数都应该声明为const成员函数,这样它可以和const对象一起使用。 24 25 }
原文:https://www.cnblogs.com/fuzhuoxin/p/12121784.html