默认实参需要注意的几个地方

原创 2015年07月07日 09:48:12

1.默认实参作为形参的初始值出现在形参列表中。我们可以为一个或多个形参定义默认值,不过需要注意一点的是,一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值

2.对于函数声明来说,一般是只对函数声明声明一次,并且将这个声明放在头文件中;但是C++中也允许对函数进行多次声明。但是需要注意的是,在给定的作用域中一个形参只能被赋予一次默认实参

这个可以详细地说一下,因为对于普通函数来说,你声明多次都是合法的;请看下面的代码:

void printNum1(int a );

void printNum1(int a );

void printNum1(int a );

void printNum2(int b);

void printNum1(int a )
{
    cout << a << endl;
}

void printNum2(int b)
{
    cout << b << endl;
}

int main( )
{
    int a = 66;
    printNum(a);
    return 0;
}

这段代码可以通过编译器编译,这段代码也是合法的;但是当我们对带有默认实参的函数进行类似的声明时,情况有些不同;

void printNum(int a = 99);

void printNum(int a  = 99);

void printNum(int a  = );

void printNum2(int b = 66);

void printNum(int a = 99)
{
    cout << a << endl;
}

void printNum2(int b = 66)
{
    cout << b << endl;
}

int main( )
{
    int a = 66;
    printNum(a);
    return 0;
}

这段代码编译就出现了问题,除了第一个printNum的声明外,其他声明都认为是重复声明;这与第二点中的“在给定的作用域中一个形参只能被赋予一次默认实参”是相符的,即使被赋予的默认实参值是同一个值,编译器也认为你对形参进行了第二次的默认实参赋值,所以这里编译不过。
但是如果你在声明该函数的时候却可以定义其他形参的默认实参值,当然要保证这个被指定默认实参的形参后面都已经被默认指定了实参(有点绕口。。。)。

类模板中的默认类型的使用和默认实参使用方法类似。

C++默认参数在声明还是定义确定?

参考:http://blog.csdn.net/sailor_8318/article/details/3348383声明是用户可以看到的部分,客户非常信任地使用这个特性,希望得到一定的结果,但是你在...
  • abraham_li
  • abraham_li
  • 2015年11月03日 09:23
  • 2375

关于默认实参

转自:http://blog.csdn.net/chollima/article/details/3454839 最近在看关于函数的一部分,其中有这两句话很吸引我,一是:既可以在函数声明中也可以...
  • sj19890401
  • sj19890401
  • 2013年12月05日 14:24
  • 399

为什么默认实参总是放在函数声明中

对于函数的默认实参,我们一般都是放在函数的声明中的,而在定义中并不指定默认实参: 在头文件中声明函数: //test.h void func(int i = 0); 而在对应的源文件中实现函数...
  • thefutureisour
  • thefutureisour
  • 2012年10月12日 13:05
  • 2829

函数默认实参

函数默认实参 默认实参是通过给函数形参列表中的形参提供明确的初始值来指定的。函数可以具有一个或多个默认实参,但是如果有一个形参具有默认实参,那么它后面所有的形参都必须具有默认实参。例如: int ...
  • mcgrady_tracy
  • mcgrady_tracy
  • 2013年06月24日 17:00
  • 1563

C++中到底在声明中还是定义中指定默认参数

【学习于C语言中文网,请勿转载】 除了函数定义,你也可以在函数声明处指定默认参数。不过当出现函数声明时情况会变得稍微复杂,有时候你可以在声明处和定义处同时指定默认参数,有时候你只能在声明处指定,...
  • czg13548930186
  • czg13548930186
  • 2017年07月25日 11:10
  • 600

C++ 默认实参

默认实参
  • hejun_haitao
  • hejun_haitao
  • 2016年03月20日 21:24
  • 98

模块中的参数问题

一、定义参数   在模块头部定义参数   如:procedure proc_name(para_name in datatype [{:=value | default value}] [, .....
  • bayueguihuaxiang
  • bayueguihuaxiang
  • 2012年03月25日 15:57
  • 482

C++ 学习之函数:问题杂谈

下面总结几个关于函数部分知识的问题,也是自己在学习过程中概念不太清楚的东东。1.函数返回值当函数要返回一个引用时,千万别返回函数中的局部对象的引用,因为函数执行完会被释放,局部对象会被释放,因此对局部...
  • guiyinzhou
  • guiyinzhou
  • 2011年04月02日 15:55
  • 536

C/C++语法[01]---C++默认参数与函数重载 注意事项

原文链接:http://blog.csdn.net/weiqubo/article/details/6928645   C++默认参数与函数重载 注意事项 一、默认参数 在C++中,可...
  • Ping_Fani07
  • Ping_Fani07
  • 2013年01月23日 21:30
  • 992

虚函数与默认实参

像其他任何函数一样,虚函数也可以有默认实参。通常,如果有用在给定调用中的默认实参值,该值将在编译时确定。如果一个调用省略了默认值的实参,则所用的值由调用该函数的类型定义,与对象的动态类型无关。通过基类...
  • qq1041256623
  • qq1041256623
  • 2014年04月09日 21:29
  • 348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:默认实参需要注意的几个地方
举报原因:
原因补充:

(最多只允许输入30个字)