postgresql 切換 log、xlog日誌的實現
C++成員函式後面加const
給隱含的this指標加const,表示這個this指標指向的東西是const的,即這個函式中無法更改資料成員,相當於只讀操作
1、const修飾普通型別的變數
const int a = 7;
int b = a; // 正確
a = 8; // 錯誤
a 被定義為一個常量,並且可以將 a 賦值給 b,但是不能給 a 再次賦值。對一個常量賦值是違法的事情,因為 a 被編譯器認為是一個常量,其值不允許修改。
2、const修飾指標變數
A、const修飾指標指向的內容,則內容為不可變數
const int *p = 8;
指標指向的8不可改變。左定向
B、const修飾指標,則指標為不可變數
int a = 8;
int * const p = &a;
*p = 9; // 正確
int b = 7;
p = &b; // 錯誤
對於const指標p,指向的記憶體地址不能夠被改變,但是其內容可以改變。右定向
C、const修飾指標和指標指向的內容,則指標和指標指向的內容都為不可變數
int a = 8;
const int * const p = &a;
const p的指向的內容和指向的記憶體地址都已固定,不可改變
根據const位於*的位置,左定值,右定向,const修飾不變數
3、const引數傳遞和函式返回值
A、值傳遞的const修飾傳遞,一般這種情況不需要const修飾,因為函式會自動產生臨時變數複製實參值
B、當const引數為指標時,可以防止指標被意外篡改
C、自定義型別的引數傳遞,需要臨時物件複製引數,對於臨時物件的構造,需要呼叫建構函式,比較浪費時間,因此採用const外加引用傳遞的方式
#include<iostream> using namespace std; class Test { public: Test(){} Test(int _m):_cm(_m){} int get_cm()const { return _cm; } private: int _cm; }; void Cmf(const Test& _tt) { cout<<_tt.get_cm(); } int main(void) { Test t(8); Cmf(t); return 0; }
輸出:
4、const修飾函式的返回值
A、const修飾內建型別的返回值,修飾與不修飾返回值作用一樣
B、const修飾自定義型別作為返回值,此時返回的值不能作為左值使用,既不能被賦值,也不能被修改
C、const修飾返回的指標或者引用,是否返回一個指向const的指標,取決於想讓使用者幹什麼
5、const修飾類成員函式
const修飾類成員函式,目的是防止成員函式修改被呼叫物件的值,如果不想修改一個呼叫物件的值,所有的成員函式都應當宣告為const成員函式