代码改变世界

[C++]const修饰符

2014-01-01 15:58  hellenism  阅读(362)  评论(0编辑  收藏  举报

Date

2014-1-1

 

Summary

const 修饰符笔记 
 

Contents

1.const 修饰符 

声明一个常量数据类型 , 在编译时就确定数据类型 

 

2.const 与 指针 

一般情况会有两种: const 在 *的左边或者右边 

(1)const 在 * 左边 

则无法通过该指针修改其指向的内存的值 

ex: 

int num = 10; 

const int* p = # 

//如果(*p)++ ,则编译器报错  

 

(2)const 在*右边 

则无法让该指针指向其他内存空间 

int num1 = 10; 

int num2 = 20; 

int* const p = &num1; 

//如果 p = &num2,则编译器报错,但是可以(*p)++ 

 

3.const 与函数参数 

 尽量把函数的形参声明为const指针,这样的好处: 

(1)函数的实参可以使用const指针和非const指针,否则函数不接受const指针 

(2)函数内部不能修改const指针指向的数据,避免函数内部污染数据 

 
 

Notes

Nothing Here 
 

Sample
 

 1 /**
 2  *  普通方法
 3  *
 4  *  @param nNum1 nNum1 description
 5  *  @param nNum2 nNum2 description
 6  *
 7  *  @return return value description
 8  */
 9 int add1(int nNum1,int nNum2)
10 {
11     return nNum1 + nNum2;
12 }
13 
14 /**
15  *  形参为 非const指针
16  *
17  *  @param pNum1 pNum1 description
18  *  @param pNum2 pNum2 description
19  *
20  *  @return return value description
21  */
22 int add2(int* pNum1,int* pNum2)
23 {
24     return (*pNum1) + (*pNum2);
25 }
26 
27 /**
28  *  形参为 const指针
29  *
30  *  @param pNum1 pNum1 description
31  *  @param pNum2 pNum2 description
32  *
33  *  @return return value description
34  */
35 int add3(const int* pNum1,const int* pNum2)
36 {
37     return (*pNum1) + (*pNum2);
38 }
39 
40 int main(int argc, const char * argv[])
41 {
42 
43     // insert code here...
44     std::cout << "Hello, World!\n";
45     
46     cout << "test 1 start." << endl;
47     
48     int num1 = 10;
49     int num2 = 20;
50     int* p1 = &num1;
51     
52     cout << "num1 : " << num1 << "\n" << "pNum1 : " << (*p1) << endl;
53     cout << "add self by pointer :" << endl;
54     
55     (*p1)+=1;
56     
57     cout << "num1:"<< num1<< endl;
58     cout << "use const pointer \n\n\n" << endl;
59     
60     const int* p2 = &num2;
61     p1 = &num2;
62     (*p1)++;
63     // (*p2)++; //note:编译器报错,不能修改num2内存中得值
64     p2 = &num1; //note:p2的指可以被修改,即可以指向其他内存空间
65     
66     int* const p3 = &num1;
67     (*p3)++;
68     // p3 = &num2; // note:编译器报错,不能修改p3的值,即永远指向num1的内存空间
69     
70     
71     cout << "test 2 start." << endl;
72     cout << "call [add1] method :" << add1(num1,num2) << endl;
73     
74     // 使用非const的指针作为实参
75     cout << "call [add2] method :" << add2(p1,p1) << endl;
76     
77     // 使用const的指针作为实参,编译报错
78     // cout << "call [add2] method :" << add2(p1,p2) << endl;
79     
80     // 在add3,由于形参的指针被const修饰,则实参可以接受 const指针 和 非const指针
81     cout << "call [add3] method :" << add3(p1,p2) << endl;
82 
83 
84     
85     return 0;
86 }
View Code 

 

THE END