C++的const關鍵字有很多種用法,而善加利用const,可以改善程式的封裝安全性。
下列介紹4種很基礎的const 用法:
1: int b = 123;
2: //1. 針對指標所儲存的常數做const的修飾。
3: //(*a) = 3 錯誤的操作,但是可以針對所指向的記憶體位址做操作。
4: //例如: a++ 在這邊是可以的。
5: const int* a = &b;
6: //2.同上
7: int const *a = &b;
8: //3.針對指標所指向的記憶體位址做const的修飾。
9: //a++ 錯誤的操作,但是可以針對所儲存的常數做操作。
10: //例如 (*a) = 3 在這邊是可以的。
11: int* const a = &b;
12: //4.結合1、2跟3,同時對常數以及記憶體位址做const的修飾
13: const int* const a = &b;
另外,const也可以用來修飾function。
範例如下:
1: #include<iostream>
2:
3: #include<string>
4:
5: using namespace std;
6:
7: class Example
8:
9: {
10:
11: private:
12:
13: int b;
14:
15: public:
16: Example()
17: {
18: b = 0;
19: }
20: //const置於 function後面,代表此function不可以修改 Member。
21: int foo1(int a)const
22: {
23: ++a;
24: ++b;//Error,因為b為Member。
25: return a;
26: }
27:
28: //修飾回傳值。
29: const int foo2(int a)
30: {
31: ++a;
32: ++b;
33: return b;
34: }
35:
36: //修飾傳地參數為const
37: int foo3(int const a)
38: {
39: ++a;//Error,a為const,不可修改。
40: ++b;
41: }
42:
43: //不可以修改指標a所儲存的值
44: void foo4(int const *a)
45: {
46: ++a;//可以,因為可以修改址。
47: (*a)++;//Error,不可以修改值
48: }
49:
50: //同上,只是改成reference ;
51: void foo5(int const &a)
52: {
53: a++;//Error。
54: }
55: //不可以修改pointer a的址
56: void foo6(int *const a)
57: {
58: (*a)++;
59: ++a;//Error,不可以修改pointer a的址。
60: }
61:
62: //回傳一個const char
63: const char *foo7()
64: {
65: return "HELLO";
66: }
67:
68: //不可以修改址跟值
69: void foo8(const int *const a)
70: {
71: (*a)++; // Error! a指向的實體為const,不可以修改其值。
72: *a++; // Error! 不可以修改址。
73: }
74: };
75:
76:
77:
以上為常用const的用法。
腦中冒出好多面試的考題...
回覆刪除不過這種可以增加變數和函式"動機、目的"的手段,看熟用熟的話確實可以增加程式的易讀性吧,
至少看一眼就大概可以知道寫code的人想要怎麼操作這個變數。