網頁

2012年6月26日 星期二

C++ Const用法

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的用法。

1 則留言:

  1. 腦中冒出好多面試的考題...
    不過這種可以增加變數和函式"動機、目的"的手段,看熟用熟的話確實可以增加程式的易讀性吧,
    至少看一眼就大概可以知道寫code的人想要怎麼操作這個變數。

    回覆刪除