初學者編程入門:C++實用技巧講解

發表于:2007-05-25來源:作者:點擊數: 標簽:編程實用技巧C++初學者入門
在準標準C++中,有關缺省變量值的限制非常模糊?;诖?,很多編譯器允許 開發 人員將缺省變量值包含在函數聲明,指向函數的指針和引用,成員函數的指針,以及typedef聲明中。 請看一下以下的程序: struct A { void func(int x=5) { } }; void g(int n=12) {
在準標準C++中,有關缺省變量值的限制非常模糊?;诖?,很多編譯器允許開發人員將缺省變量值包含在函數聲明,指向函數的指針和引用,成員函數的指針,以及typedef聲明中。

請看一下以下的程序:






struct A
            {
            void func(int x=5)
            {
            }
            };
            void g(int n=12)
            {
            }
            // 根據C++標準,不能在以下聲明中使用缺省變量值。
            void (*pf)(inti=120);
            void (A::*pmf)(int j=50);
            typedef void (*PF)(inti=100);
            // 函數的引用
            typedef void (&PRF)(inti=100);
            int main()
            {
            pf=g;
            PF pf2=g;
            pmf=&A::func;
            A a;
            //這些調用使用了哪些缺省值?
            pf();
            pf2();
            (a.*pmf)();
            }

A::func()和g()具有缺省變量值,這是合理的。然而,指針pmf,pf以及typedefPF也定義了缺省的變量值。根據C++標準,這是不規范的。

這一代碼的實際使用中,其中的一個問題是這些聲明中提供的缺省值與A::func()和g()函數提供的值不一致。也就是說,很多編譯器將這些代碼作為非標準的擴展。當調用g()函數時,我的編譯將120作為pf的缺省值;然而,對于pf2,它使用100作為它的缺省值。

作為一種規則,應該避免使用指向函數的指針,成員函數的指針,以及typedef命名的缺省變量值。即使你的編譯器接受了它們,在更高版本中它也可能不被接受。而且,這些代碼也會降低程序的靈巧性,也會給那些無法判別哪些編譯器接收何種缺省變量的開發人員帶來誤導。在使用這些缺省變量值的合法代碼中,這里的建議是添加一些必要的注釋,以說明需要哪些缺省變量值。

原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97