C++函数的默认参数详情

文章转自微信 公众号:Coder梁(ID:Coder_LT)

C++当中的支持默认参数,如果你学过Python,那么想必对此不会陌生。C++中的默认参数的用法和Python基本一致。

使用默认参数的方法非常简单,也就是我们在函数声明的时候,就为某些参数指定好默认值。当我们调用函数的时候,如果没有传入对应的参数,那么则使用默认值。

比如:

void func(int a, int b=2, int c=3, int d=4) {
    cout << a << " " << b << " " << c << " " << d << endl;
}

在这个函数func当中,我们定义了三个变量的默认值,那么我们在调用的时候,以下这几种方式都是可以的:

func(1);   // 1 2 3 4
func(1, 3);   // 1 3 3 4
func(1, 3, 5);  // 1 3 5 4
func(1, 3, 4, 8); // 1 3 4 8

另外,默认参数的值也不一定是定值,也可以是一个表达式,

例如:

class Test {
public:
    static int getValue() {
        return 1;
    }

    int func(int a, int b = getValue()) {
        return b;
    }
} ;

Python一样,C++当中也有对默认参数的限制:如果某个参数是默认参数,那么从它开始之后的所有参数必须都是默认参数。

void func(int a, int b=3, int c=4);  // 合法
void func(int a=3, int b=4, int c=5); // 合法
void func(int a, int b=3, int c);  // 非法

默认参数是一个非常好用的特性,熟练使用可以大大降低编码的复杂度,可以实现各种高级操作。

但默认参数也有一个大坑,需要注意,就是和函数重载一起使用的时候。

比如我们有这样两个函数:

void func(int a);
void func(int a, int b=3);

这两个函数虽然函数名一样,但是接收的参数不同。因此会被视作是函数重载,编译器会根据我们传入的参数进行判断究竟调用哪一个。

但如果我们这样调用函数,则会引起歧义:

func(3);

因为编译器会不知道究竟你是在调用哪一个函数,于是就会引发下列的报错:

到此这篇关于C++函数的默认参数详情的文章就介绍到这了,更多相关C++函数的默认参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++函数参数取默认值的深入详解

    一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同.有时多次调用同一函数时用同样的实参,C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了.如有一函数声明float area(float r=6.5);指定r的默认值为6.5,如果在调用此函数时,确认r的值为6.5,则可以不必给出实参的值,如area( );  //相当于area(6.5);如果不想使形参取此默认值,则通过实参另行给出.如area(7.5); //形参得到的值为7.5,而不是6.5这

  • 解析C++函数的默认参数和占位参数及较之C语言的拓展

    可以将占位参数与默认参数结合起来使用 意义: 为以后程序的扩展留下线索 兼容C语言程序中可能出现的不规范写法 //C++可以声明占位符参数,占位符参数一般用于程序扩展和对C代码的兼容 int func(int a, int b, int = 0) { return a + b; } void main() { //如果默认参数和占位参数在一起,都能调用起来 func(1, 2); func(1, 2, 3); system("pause"); } 默认参数对C的函数拓展 1.C++中可

  • 从汇编看c++函数的默认参数的使用说明

    在c++中,可以为函数提供默认参数,这样,在调用函数的时候,如果不提供参数,编译器将为函数提供参数的默认值.下面从汇编看其原理. 下面是c++源码: 复制代码 代码如下: int add(int a = 1, int b = 2) {//参数a b有默认值    return a + b;}int main() {   int c= add();//不提供参数 } 下面是mian函数里面的汇编码: 复制代码 代码如下: ; 4    : int main() { push    ebp    m

  • C++函数的默认参数详情

    文章转自微信 公众号:Coder梁(ID:Coder_LT) C++当中的支持默认参数,如果你学过Python,那么想必对此不会陌生.C++中的默认参数的用法和Python基本一致. 使用默认参数的方法非常简单,也就是我们在函数声明的时候,就为某些参数指定好默认值.当我们调用函数的时候,如果没有传入对应的参数,那么则使用默认值. 比如: void func(int a, int b=2, int c=3, int d=4) { cout << a << " "

  • C语言 函数缺省参数详情

    目录 一.函数简介 1.函数声明 2.函数定义 3.函数调用 4.函数形参和实参 二.函数缺省参数 1.函数全缺省参数 2.函数半缺省参数 三.注意事项 一.函数简介 1.函数声明 函数声明只是一个空壳,不会有具体的函数实现,而定义要实现函数的实现,例如: int sub(int x,int y); //只需要声明即可,不需要实现这个函数的功能 2.函数定义 函数的定义需要实现这个函数的功能,例如: int sub(int x,int y) ////需要实现这个函数的功能 { return (x

  • Python中函数及默认参数的定义与调用操作实例分析

    本文实例讲述了Python中函数及默认参数的定义与调用操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' Python中的函数使用小括号调用.函数在调用之前必须先定义. 如果函数中没有return语句,就会自动返回None对象. Python是通过引用调用的.如果函数内对参数的改变会影响到原始对象. 只有可变对象会受此影响,对不可变对象,它的行为类似按值调用. ''' ''''' 定义函数: def function_name([arguments]): "option

  • 深入解析C++中的函数模板和函数的默认参数

    C++函数模板 我们知道,数据或数值可以通过函数参数传递,在函数定义时它们是未知的,只有在发生函数调用时才能确定其值.这就是数据的参数化. 其实,数据类型也可以通过参数来传递,在函数定义是可以不指明具体的数据类型,当发生函数调用时,编译器可以根据传入的参数自动确定数据类型.这就是数据类型参数化. 所谓函数模板,实际上是建立一个通用函数,其返回值类型和形参类型不具体指定,用一个虚拟的类型来代替(实际上是用一个标识符来占位).这个通用函数就称为函数模板(Function Template).凡是函数

  • C++中函数的默认参数详细解析

    使用方法:(1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数.(2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替. 注意事项:(1)一般在声明函数是设置默认参数. 如果在函数声明和定义函数时都设置了默认参数,则以函数声明的默认参数为准. 复制代码 代码如下: #include<iostream>using namespace std;int main(){ double add(double a=3.2,double b=9.6);//在函数声明时设置默认参数 co

  • Python函数的默认参数设计示例详解

    在Python教程里,针对默认参数,给了一个"重要警告"的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 默认值只会执行一次,也没说原因.会打印出结果: [1] [1, 2] [1, 2, 3] 因为学的第一门语言是Ruby,所以感觉有些奇怪. 但肯定的是方法f一定储存了变量L. 准备知识:指针 p指向不可变对象,比如数字.则相当于p指针指向了不同的内存地址. p指向的是可变对象,

  • Kotlin学习教程之函数的默认参数

    前言 ​ 在Java中,为函数的参数添加默认值是不被允许的,这是为了防止默认参数与函数重载同时使用时二义性的问题,考虑下面的例子: void func(p1: String, p2: String, p3: String = "default") { // do something } void func(String p1, String p2) { // do something } 假设上面的代码是可以编译通过的,那么当调用func("p1","p2

  • python函数的默认参数请勿定义可变类型详解

    目录 函数的默认参数请勿定义可变类型 可变类型和不可变类型 定义可变类型会有什么问题? 导致的原因 解决方法 关于可变类型作为默认参数时的注意点 测试:将可变类型列表换为字典 测试:来个不可变类型字符串 测试:元祖包个列表来 小结一下 函数的默认参数请勿定义可变类型 经常会看到这样一句代码警告: Default argument value is mutable 意思是告诉我们函数的定义中,使用可变类型做默认参数. 那为什么会有这个警告呢? 可变类型和不可变类型 可变类型(mutable):列表

随机推荐