/**
* @file test.cpp
* @author chenjiashou(chenjiashou@baidu.com)
* @date 2017/08/20 15:54:27
* @version $Revision$
* @brief
*
**/ #include <iostream> int print(int a = , int b = ); int main() {
print();
print(-);
return ;
} //int print(int a = 1, int b = 2) {// 编译错
int print(int a, int b) {
std::cout << a << "," << b << std::endl;
}

结果:

,
-,

首先看上述的代码,print函数是带有默认参数的。

所以调用print(), print(-1)都可以准确的输出。

这种默认参数的情况会带来有些便利。(比如初始化一个商品对象,在99%的情况在都是正常的,那么这个商品是否正常的标记就可以默认为1,特殊的1%情况,再加上)

但是有以下三个要注意的情况。

1. 默认参数只能放在函数声明处或者定义处,能放在声明处就放在声明处 。

上述代码把那行注释打开,默认参数在声明和定义处都有了,那么就会有编译错误。(两次默认赋值是不被允许的。)

a. 大部分情况,别人调用你的代码只能看到函数声明,如果你写在定义处,别人根本不知道你的默认参数是什么。

b.如果你是在定义处写的默认参数,那么你在使用该函数前就需要把函数定义放在前面。不然编译阶段通过无默认参数的函数声明无法确定这个函数是带默认参数的。

所以,默认参数写在声明处啊。^ ^

2.如果某个参数是默认参数,那么它后面的参数必须都是默认参数

因为非默认参数的参数必须要给出具体值,而调用函数传递参数的时候是从左到右的,所以非默认参数前面的都必须要传值进来。

那么默认参数后面的当然也得都为默认参数。

3.不要重载一个带默认参数的函数

看下这个函数:

class Test
{
public:
int func(int a)
{
return a;
} int func(int a, int b = )
{
return a + b;
}
} ;

你调用func(1)的时候,谁知道你想调用哪一个。

c++ 函数的默认参数的更多相关文章

  1. C++中函数的默认参数

    使用方法: (1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数. (2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替. 注意事项: (1)一般在声明函数是设置默认参数. 如 ...

  2. C#函数的默认参数——填坑记

    昨天踩了一个坑.默认参数 + 增量发布的坑. 过程是这样的. 1. 有一个底层的方法,格式形如 void Test<T>(int p1, string p2, Func<T> ...

  3. python定义函数时默认参数注意事项

    如果在调用一个函数时,没有传递默认参数,则函数内的默认参数是对函数的默认参数属性__defaults__的引用, 如 def func(arg1=[]): arg1.append(2) 调用func时 ...

  4. 对C++虚函数使用默认参数的注意事项

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/ 备忘一个关于虚函数的小知识点 使用多态调用一个类型中定义的虚函数时,编译器会根据指针的当前 ...

  5. JavaScript函数的默认参数(default parameter)

    JavaScript函数的默认参数(default parameter) js函数参数的默认值都是undefined, ES5里,不支持直接在形参里写默认值.所以,要设置默认值,就要检测参数是否为un ...

  6. Python函数的默认参数的设计【原创】

    在Python教程里,针对默认参数,给了一个“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print( ...

  7. 【C/C++】函数的默认参数/函数的占位参数/函数重载/注意事项

    函数的默认参数 返回值类型 函数名(参数=默认值){} #include <iostream> using namespace std; int func(int a = 10, int ...

  8. C++中函数的默认参数和C语言中volatile的学习

    1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...

  9. Delphi函数参数传递 默认参数(传值)、var(穿址)、out(输出)、const(常数)四类

    Delphi的参数可以分为:默认参数(传值).var(传址).out(输出).const(常数)四类 可以对比C/C++的相关知识,类比学习. 1.默认参数是传值,不会被改变,例子 function ...

  10. PHP函数中默认参数的的写法

    函数可以定义 C++ 风格的标量参数默认值,如下所示: Example #3 在函数中使用默认参数 <?php function makecoffee($type = "cappucc ...

随机推荐

  1. ELK filter过滤器来收集Nginx日志

    前面已经有ELK-Redis的安装,此处只讲在不改变日志格式的情况下收集Nginx日志. 1.Nginx端的日志格式设置如下: log_format access '$remote_addr - $r ...

  2. c# 连接mysql配置config,不用装net connector

    <system.data> <DbProviderFactories> <remove invariant="MySql.Data.MySqlClient&qu ...

  3. ORA-01033错误解决方案

    现象:SQL*Plus无法连接,显示以下错误: ORA-01033 : ORACLE initialization or shutdown in progress 分析:应该是Oracle在启动后,用 ...

  4. 设计模式1-单例模式(Singletion)

    单例模式(Singletion):保证一个类仅有一个实例,并提供一个访问该实例的全局访问点. 单例模式主要作用是保证唯一的实例,可以严格地控制客户端怎样访问该实例以及何时访问它.可以简单的理解为对唯一 ...

  5. iOS: 控制UIView的外形

    #import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> @interface UIView (Shape) - (v ...

  6. EventBus的思路和一些反思

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws   C#本地实现的和Redis Set实现的,实际上都是要维护一个Events和Handle ...

  7. 【.NET】正则表达式笔记

    很早就听说正则表达式的强大,今天终于一睹它的真容,在这里记下学习时候的笔记,以便以后查看 1.正则表达式 用于描述字符串规则的的特殊的字符(正则表达式本身是字符串,用来描述字符串的相关规则,用于与其他 ...

  8. jQuery使用scrollTop获取div标签的滚动条已滚动高度(jQuery版本1.6+时,用prop()方法代替attr()方法)

    $("#content").append('<div>' + data.msg + '</div>'+.'<br>');$('#content' ...

  9. 【LFM】隐语义模型

    模型解释: http://blog.csdn.net/harryhuang1990/article/details/9924377

  10. linux中如何通过echo输出!(叹号)? -bash: !": event not found

    需求描述: 今天在做通过echo结合passwd给用户改密码的过程中,出现无法修改的错误. 错误如下: [root@testvm ~]# useradd mytest [root@testvm ~]# ...