设置参数默认值的几种错误示例

#include <iostream>
#include <string>
using namespace std;

#if 1   //ok
int add(int num1,int num2,int num3 = 0,int num4 = 0)
{
    cout << "int add(int num1,int num2,int num3 = 0,int num4 = 0)" << endl;
    return num1 + num2 + num3 + num4;
}
#endif

#if 0
int add(int num1,int num2,int num3 = 0,int num4)    //error,定义时,遵守从右往左设定参数默认值:如果右边的变量没有设置默认值,则左边的也不能设置参数默认值
{
    cout << "int add(int num1,int num2,int num3 = 0,int num4 = 0)" << endl;
    return num1 + num2 + num3 + num4;
}
#endif

#if 0
int add(int num1,int num2 = 0,int num3,int num4 = 0)    //定义时,遵守从右往左设定参数默认值:如果右边的变量没有设置默认值,则左边的也不能设置参数默认值
{
    cout << "int add(int num1,int num2,int num3 = 0,int num4 = 0)" << endl;
    return num1 + num2 + num3 + num4;
}
#endif

int main()
{
    int res = add(10,20);
    cout << res << endl;

//    res = add(10,20,,40); // error
    cout << res << endl;    //调用有默认的函数时也要遵守从右向左的规则:右边没有使用默认值,则左边也不能设置默认值}

//    res = add(10,20,,);   //error,不用,,设置默认值
}
时间: 2024-10-06 08:16:03

设置参数默认值的几种错误示例的相关文章

js设置函数参数默认值的3种方法

js默认是不支持funtion f($a=a){}这种写法的,如果想设置函数参数的默认值,可以参考如下三种方法: 第一种方法: 使用arguments,函数所有的参数都会存入arguments数组离去,所以我们可以从中获取相应的参数然后赋值 function example(a,b){ var a = arguments[0] ? arguments[0] : 1;//设置参数a的默认值为1 var b = arguments[1] ? arguments[1] : 2;//设置参数b的默认值为

ES6笔记之参数默认值(译)

原文链接:http://dmitrysoshnikov.com/ 原文作者:Dmitry Soshnikov 译者做了少量补充.这样的的文字是译者加的,可以选择忽略. 在这个简短的笔记中我们聊一聊ES6的又一特性:带默认值的函数参数.正如我们即将看到的,有些较为微妙的CASE. ES5及以下手动处理默认值 在ES6默认值特性出现前,手动处理默认值有几种方式: function log(message, level) { level = level || 'warning'; console.lo

ES6: 参数默认值及中间域

下午看了一章 ECMA-262 by Dmitry Soshnikov, 现在稍稍来小结下ES6中的参数默认值以及由此产生的参数中间作用域. 原文地址: http://dmitrysoshnikov.com/ecmascript/es6-notes-default-values-of-parameters/#conditional-intermediate-scope-for-parameters ES6中的参数默认值用法和其他语言都差不多,直接在参数后赋值: 1 function log(me

C++函数带默认值的几种情形

1. 默认参数的规则 默认值定义 C++支持函数参数带默认值.这里所谓的默认值,指的是在调用函数时,可以不指定某些参数,编译器会自动把默认值传递到函数调用中. 默认值位置 指定默认值的参数必须位于形参列表最右端,从右往左.否则会出现二义性,编译器无法处理. 默认值设置 默认值可以在函数声明或函数定义中设置,只要保证不出现参数重定义即可. 2.默认参数示例 在函数声明中设置默认值 这是最常见的一种情形.主要有以下两种声明方式: 声明中给参数赋默认值 声明中用类型指定默认值 float area(f

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

研究下JavaScript中的Rest参数和参数默认值

研究下JavaScript中的Rest参数和参数默认值 本文将讨论使 JavaScript 函数更有表现力的两个特性:Rest 参数和参数默认值. Rest 参数 通常,我们需要创建一个可变参数的函数,可变参数是指函数可以接受任意数量的参数.例如,String.prototype.concat 可以接受任何数量的字符串作为参数.使用 Rest 参数,ES6 为我们提供一种新的方式来创建可变参数的函数. 我们来实现一个示例函数 containsAll,用于检查一个字符串中是否包含某些子字符串.例如

ES6 随记(3.4.1)-- 函数的拓展(参数默认值,扩展运算符)

上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. ES6 随记(3.2)-- 正则的拓展 & 数值的拓展 5. ES6 随记(3.3)-- 数组的拓展 4. 拓展 e. 函数的拓展 · 参数默认值.此节与结构赋值关系甚大,可去往前文再看一次 再来烧脑的重新打开这个蛋疼的案例, function fn1({x = 0, y = 0} = {}) { console.log(x, y);

C#4.0语法糖之第三篇: 参数默认值和命名参数 对象初始化器与集合初始化器

今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完善以及自我提高,给各位园友们带来更好,更高效的文章. 废话就说到这里,下面正式进入我们的今天的C#4.0语法糖,今天给大家分享一下参数默认值.命名参数.对象初始化器和集合初始化器. 参数默认值和命名参数:方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合

C++的参数默认值和哑元

一. 函数的参数支持哑元 哑元是一种没有参数名的参数,主要是为了函数间的区别以及向前兼容 二. 函数的参数可以指定默认值,当调用时没有传参,就以默认值进行函数调用. 三. 有默认值的形参必须靠右,声明和定义分开时,默认值必需在声明中指定,定义中不再指定. //默认参数 与 哑元 #include <iostream> using namespace std; /* 1 void print(int *a,int n){ for (int i = 0; i<n; i++) { cout &