C++的缺省参数你了解嘛

目录
  • 一、缺省参数概念
    • 有什么用
  • 二、缺省参数分类
    • 全缺省参数
    • 半缺省参数
  • 总结

一、缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参

#include<iostream>
using namespace std;
void TestFunc(int a = 0)//参数缺省值
{
	cout << a << endl;
}
int main()
{
	TestFunc();//没有指定实参,使用缺省值
	TestFunc(10);//指定实参,使用实参
	return 0;
}

有什么用

比如在 C 语言中有个很苦恼的问题是写栈时,不知道要开多大的空间,之前我们是如果栈为空就先开 4 块空间,之后再以 2 倍走,如果我们明确知道要很大的空间,那么这样就只能一点一点的接近这块空间,就太 low 了。但如果我们使用缺省,明确知道不需要太大时就使用默认的空间大小,明确知道要很大时再传参

#include<iostream>
using namespace std;
namespace WD
{
	struct Stack
	{
		int* a;
		int size;
		int capacity;
	};
}
using namespace WD;
void StackInit(struct Stack* ps)
{
	ps->a = NULL;
	ps->capacity = 0;
	ps->size = 0;
}
void StackPush(struct Stack* ps, int x)
{
	if(ps->size == ps->capacity)
	{
		//ps->capacity *= 2;//err
		ps->capacity == 0 ? 4 : ps->capacity * 2;//这里就必须写一个三目
	}
}
void StackInitCpp1(struct Stack* ps, int defaultCP)
{
	ps->a = (int*)malloc(sizeof(int) * defaultCP);
	ps->capacity = 0;
	ps->size = defaultCP;
}
void StackInitCpp2(struct Stack* ps, int defaultCP = 4)//ok
{
	ps->a = (int*)malloc(sizeof(int) * defaultCP);
	ps->capacity = 0;
	ps->size = defaultCP;
}
int main()
{
	//假设明确知道这里至少需要100个数据到st1
	struct Stack st1;
	StackInitCpp1(&st1, 100);
	//假设不知道st2里需要多少个数据 ———— 希望开小点
	struct Stack st2;
	StackInitCpp2(&st1);//缺省
	return 0;
}

二、缺省参数分类

全缺省参数

void TestFunc(int a = 10, int b = 20, int c = 30)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}
int main()
{
	//非常灵活,
	TestFunc();
	TestFunc(1);
	TestFunc(1, 2);
	TestFunc(1, 2, 3);
	//TestFunc(1, , 3);//err,注意它没办法实现b不传,只传a和b,也就是说编译器只能按照顺序传
	return 0;
}

注意:

全缺省参数只支持顺序传参

半缺省参数

//void TestFunc(int a, int b = 10, /*int f, - err*/ int c = 20);//err,void TestFunc(int a, int b = 10, /*int f, int x = y, -> err*/ int c = 20){cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;cout << endl;}int main(){//TestFunc();//err,至少得传一个,这是根据形参有几个非半缺省参数确定的TestFunc(1);TestFunc(1, 2);TestFunc(1, 2, 3);return 0;}//void TestFunc(int a, int b = 10, /*int f, - err*/ int c = 20);//err,
void TestFunc(int a, int b = 10, /*int f, int x = y, -> err*/ int c = 20)
{
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
	cout << endl;
}
int main()
{
	//TestFunc();//err,至少得传一个,这是根据形参有几个非半缺省参数确定的
	TestFunc(1);
	TestFunc(1, 2);
	TestFunc(1, 2, 3);
	return 0;
}
//a.hvoid TestFunc(int a = 10);//a.cppvoid TestFunc(int a = 20){}

注意:

  • 半缺省参数必须从右往左依次来给出,且不能间隔着给
  • 缺省参数不能在函数声明和定义中同时出现
  • 缺省值必须是常量或者全局变量
  • C 语言不支持缺省

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++缺省参数的理解

    目录 什么叫缺省参数? 缺省多个参数的情况 1.全缺省 2.半缺省 总结 什么叫缺省参数? 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参. 注意:要想省略参数,声明或者定义内必须指定默认值 void TestFunc(int a = 0) { cout<<a<<endl; } int main() { TestFunc(); // 没有传参时,使用参数的默认值 TestFunc(10); // 传参时,使用

  • C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)

    一.C++关键字 C++总共有63个关键字,在入门阶段我们只是大致了解一下就可,在后续博客中会逐渐讲解 二.命名空间 相信学过C++的同学,一定都写过下面这个简单的程序 #include<iostream> using namespace std; int main() { cout<<"hello world"<<endl; return 0; } 我们先来看第二行代码,using namespace std , 这行代码是什么意思呢 ? 这里我们

  • C++中构造函数的参数缺省的详解

    C++中构造函数的参数缺省的详解 前言: 构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值.在构造函数中也可以采用这样的方法来实现初始化. #include <iostream> using namespace std; class A { public : A(int aa=0,int bb=00); //在声明构造函数时指定默认参数 int volume( ); int a; int b; }; int main( ) { A

  • C++缺省参数的具体使用

    目录 一.缺省参数概念 二.缺省参数分类 全缺省参数 半缺省参数 缺省参数的误区 1.滥用缺省参数,损害代码的结构和可读性. 2.多个缺省参数,可能引入逻辑含混的调用方式 3.重载时可能出现二义性 4.函数调用中的精神分裂症 一.缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参 #include<iostream> using namespace std; void TestFunc(int a = 0)//

  • python 函数的缺省参数使用注意事项分析

    本文实例讲述了python 函数的缺省参数使用注意事项.分享给大家供大家参考,具体如下: python的函数支持4种形式的参数:分别是必选参数. 缺省参数. 可变长参数.关键字参数:而且参数的书写顺序也是又一定规定的,顺序如下 def fun(param, default_params, arbitrary_params, keyword_param) 下面针对缺省型参数分析一些注意事项 先定义这样子一个函数 def test_fun(a=[]): a.append('a') print a i

  • 关于C# 4.0新特性“缺省参数”的实现详解

    前言 C#4.0关于缺省参数的新特性,相信大家都不会陌生.所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法的时候如果采用该默认值,你就无须指定该参数.和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招.缺省参数最终体现为两个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute . 目录 一.缺省参数的用法 二.实现缺省参数的两个特性:OptionalAttribute和D

  • c语言中缺省参数的类型总结

    1.函数全缺省参数,函数在定义或者声明时,所有的形参都默认值. #include <stdio.h> //x,y为函数的形参,如果函数被调用时,没有设置x和y值,x值默认为100,y值默认为5 int sub(int x=100,int y=5) { return (x-y); } int main(void) { int a=20; int b=10; //变量a.b为sub函数的实参 printf("sub函数计算结果 = %d\n",sub(a, b)); //注意:

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

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

  • C++的缺省参数你了解嘛

    目录 一.缺省参数概念 有什么用 二.缺省参数分类 全缺省参数 半缺省参数 总结 一.缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参 #include<iostream> using namespace std; void TestFunc(int a = 0)//参数缺省值 { cout << a << endl; } int main() { TestFunc();//没有指定实

  • C++命名空间和缺省参数介绍

    一.命名空间 为什么引入命名空间 在C++中,变量.函数和类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的.     int a = 10;          int main(void)     {         int a = 10;         return 0;     } 这里一个a是全局变量,一个a是局部变量.可以编译通过

  • C++浅析缺省参数的使用

    目录 一. 概念 二. 分类 全缺省参数 半缺省参数 一. 概念 缺省参数(有些地方叫默认参数)是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参. void TestFunc(int a = 0) { cout << a << endl; } int main() { TestFunc(); //没有传参时,使用参数的默认值 TestFunc(10); //传参时,使用指定的实参 } 二. 分类 全缺省参数 缺省全部参

随机推荐