C/C++日常學習總結(第一篇)const用法及printf的執行順序
阿新 • • 發佈:2019-02-03
1.c語言中printf在不同編譯器下面的執行順序
【程式碼】:
int n = 0;
printf("%d,%d,%d",++(++n),++(++n),++(++n));
【結果】:
VC6.0下面的結果是:6,5,4 VS2008下面的結果是:6,6,6
【解析】:
(1).在VC6.0下,printf的執行順序是從右向左,大家如果在除錯時將反彙編視窗開啟,會見到move ,push等一系列 組合語言,仔細觀察可以看到“%d,%d,%d”這條語句是在最下面,依此可以得出是從右向左的
(2).跟程式碼執行的優先順序有關,首先執行的括號中的程式碼,3個括號執行完成後n=3,再根據VC6.0下printf的執行順序
(3).VS2008下面就沒仔細看反彙編了,但是他的執行結果是一樣的6,6,6,說明這條語句執行的結果跟編譯器相關.
2.如果類中的成員變數分別是const常量型別,&引用型別,static靜態成員變數,如何初始化?
【程式碼】:
class Cpoint { private: const int m_ix; int &m_iy; static int m_itotal; public: Cpoint(int x=0,int y=0):m_ix(x),m_iy(y) { //m_ix=x;//這是錯誤的初始化,編譯器報錯 //m_iy=y; } }; int Cpoint::m_itotal=0;
【解析】
(1.)const和&的變數只能在初始化列表中初始化。
(2.)static成員變數在類外進行初始化,前面要加型別,域名限定符
3.類的成員函式型別定義為static,如何訪問?
【程式碼】:
class CTotal { private: static int m_iVaule; public: CTotal(int x) { m_iVaule+=x; } static void DisplayValue(); }; void CTotal::DisplayValue() { cout<<"呼叫static靜態成員函式"<<m_iVaule<<endl; } void main() { Ctotal total1(100); Ctotal::DisplayValue(); }
【解析】:
(1.)原則上static成員函式,只能訪問靜態成員變數
(2.)如果要訪問物件,則靜態成員函式要帶類引數
4.const的不同用法
(1.)用const定義類的成員函式,則記得初始化時選用初始化列表
(2.)const 成員函式,此時在該成員函式不能更改引數的數值,且其呼叫函式也必須是const型別
(3.)const 物件,const CTotal tal(100);此物件只能訪問類中的const成員函式.