您的位置:首页 > 编程语言 > C语言/C++

C++缺省参数函数简介和使用

2017-06-07 10:23 841 查看
所谓缺省参数,顾名思义,就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。缺省参数使用主要规则:调用时你只能从最后一个参数开始进行省略,换句话说,如果你要省略一个参数,你必须省略它后面所有的参数,即:带缺省值的参数必须放在参数表的最后面。
缺省值必须是常量。显然,这限制了缺省参数的数据类型,例如动态数组和界面类型的缺省参数值只能是
nil;至于记录类型,则根本不能用作缺省参数。 缺省参数必须通过值参或常参传递。

1. 如果函数已经带有缺省参数的函数原型声明,则在该函数的定义中不允许出现缺省值。

2. 一旦为函数的某个参数指定了缺省值,则必须为后续参数也定义缺省值,从右到左定义缺省参数。

        void showmessage(char *text,int length=1,int color ) ; //错color也应定义缺省值。

3. 调用函数时,如果略去一个参数传递,则略去后续所有参数传递,调用时将参数从左至右,逐一传递给行参。

       showmessage("hello");

       showmessage("hello",5);

       showmessage("hello",5,8);

       showmessage("hello", ,8);          // 错误

缺省参数的误区

    使用缺省参数时应该注意避开下列几种误区。

    1.滥用缺省参数,损害代码的结构和可读性。

      void f(bool b=false)

      {

            if (b)

            {

                  file://code of open file

            }

            else

            {

                  file://code of close file

            }

      }

    打开文件和关闭文件在实现代码上没有什么共同点,把两个属于同一类别的函数误认为是实现机制相同,凭空捏造一个参数硬把它们凑在一块,没有什么好处!相反,谁能记得住f(true)代表打开,f()代表关闭呢?况且,f(false)、f()都可以关闭文件,如果调用者混合使用它们就会增加维护上的困难。这种情况下,写成两个独立的函数,非常清晰。

      void Open()

      {

                  file://code of open file

      }

      void Close()

      {

                  file://code of close file

      }

    推而广之,如下的做法也值得商榷。

      class CString

      {

      private:

            char * pcData;

      public:

            CString(char * pc=NULL);

      };

      CString::CString(char * pc)

      {

         
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数