1. 程式人生 > >C/C++日常學習總結(第一篇)const用法及printf的執行順序

C/C++日常學習總結(第一篇)const用法及printf的執行順序

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的執行順序

得出結果為6,5,4

    (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成員函式.