1. 程式人生 > >[轉]C++中const的使用

[轉]C++中const的使用

用法 non-const tint brush include 函數返回 .com pre oid

原文鏈接:http://www.cnblogs.com/xudong-bupt/p/3509567.html

平時在寫C++代碼的時候不怎麽註重const的使用,長久以來就把const的用法忘記了

寫一點東西加深下印象

#include<iostream>
using namespace std;
int main(){
    int a1=3;   ///non-const data
    const int a2=a1;    ///const data

    int * a3 = &a1;   ///non-const data,non-const pointer
    const int * a4 = &a1;   ///const data,non-const pointer
    int * const a5 = &a1;   ///non-const data,const pointer
    int const * const a6 = &a1;   ///const data,const pointer
    const int * const a7 = &a1;   ///const data,const pointer

    return 0;
}

感覺const特別反人類的一點就是他出現在*左邊的時候修飾的是右邊的數據內容,出現在*右邊的時候修飾的反而是指針

const修飾成員函數

(1)const修飾的成員函數不能修改任何的成員變量(mutable修飾的變量除外)

(2)const成員函數不能調用非const成員函數,因為非const成員函數可以會修改成員變量

#include <iostream>
using namespace std;
class Point{
    public :
    Point(int _x):x(_x){}

    void testConstFunction(int _x) const{

        ///錯誤,在const成員函數中,不能修改任何類成員變量
        x=_x;

        ///錯誤,const成員函數不能調用非onst成員函數,因為非const成員函數可以會修改成員變量
        modify_x(_x);
    }

    void modify_x(int _x){
        x=_x;
    }

    int x;
};

  

值傳遞

如果函數返回值采用“值傳遞方式”,由於函數會把返回值復制到外部臨時的存儲單元中,加const 修飾沒有任何價值。所以,對於值傳遞來說,加const沒有太多意義。

所以:

  不要把函數int GetInt(void) 寫成const int GetInt(void)。
  不要把函數A GetA(void) 寫成const A GetA(void),其中A 為用戶自定義的數據類型。

總結:在編程中要盡可能多的使用const,這樣可以獲得編譯器的幫助,以便寫出健壯性的代碼。

[轉]C++中const的使用