`
wujianjun0410
  • 浏览: 104712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

默认参数的使用注意事项

阅读更多
对于C++的缺省参数的使用我们应该注意以下几点:
缺省参数不能出现在函数指针、函数引用以及typedef中
缺省参数可以在不同的声明中逐步给出
不同作用域的声明中定义的缺省参数是独立的,互不影响; 
同一作用域的声明中不能重复定义同一个参数的缺省值。 
看个例子就明白了: 
void f(int, int);  
void f(int, int = 7);  
void f(int = 7, int); //这句如果提到上一句前面就不对了  
void m()  
{  
     f(4); //等价于f(4,7)  
     void f(int, int); //因为进入新的作用域,f现在变成不带缺省值  
     f(4); //错误,参数数目不符  
     void f(int, int = 5); //OK  
     f(4); //等价于f(4,5)  
     void f(int, int = 5); //错误,不能重复定义,尽管这里的缺省值和前面的值是一样的  
}  

int main()  
{  
     f(); //等价于f(7,7)  
}  


类似的规则也适用于类的成员函数。不过不同的一点是,缺省值的作用范围是整个translation unit
class C {  
     void f(int i = 3);  
    void g(int i, int j = 99);  
};  
void C::f(int i = 3) //错误,重复定义缺省值  
{  
     g(); //等价于g(88,99)  
}  
void C::g(int i = 88, int j) //整个translation unit有效  
{  
}  

为了不违反One Definition Rule,每个translation unit中指定的缺省值不能不同。 
比如说,你不能这样写: 
A.cpp 
void f(int, int = 7); 
... 
void f(int = 3, int); 

B.cpp 
void f(int, int = 7); 
... 
void f(int = 4, int); 

缺省值不一定是常数,允许使用表达式,所以也可以是全局变量或者函数返回值。(8.3-1) 
但是缺省值不能是局部变量或者非静态成员函数的返回值,也不能是this。(8.3-7~9) 
缺省值的表达式中也不能引用其它参数 
比如: 
int f(int (&a)[10],int b = sizeof(a)); 

虚成员函数的缺省值是静态绑定的。而且派生类不会继承基类的缺省参数(8.3-10)
分享到:
评论

相关推荐

    C使用默认参数的构造函数-C教程共3页.pdf.zip

    在本教程“C使用默认参数的构造函数”中,我们将深入探讨如何利用默认参数来优化构造函数的使用,提高代码的灵活性和可读性。 默认参数是一种非常实用的特性,允许我们在调用函数或构造函数时不提供某些参数的值。...

    C++默认参数与函数重载及注意事项

    当重载函数与默认参数一起使用时,可能出现二义性问题。例如,如果有两个或更多具有不同参数数量和默认值的重载函数,调用函数时可能不知道应选择哪个版本。如下所示: ```cpp func(int); // 重载函数1 func(int, ...

    指针作为函数参数的注意事项.cpp

    指针作为函数参数的注意事项.cpp

    Python函数默认参数常见问题及解决方案.docx

    Python函数的默认参数是编程中常见的特性,它允许我们在调用函数时省略某些参数的值,这些参数将使用在函数定义时设定的默认值。然而,如果不正确地使用默认参数,可能会导致一些意外的问题。以下是一些关于Python...

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

    注意事项:(1)一般在声明函数是设置默认参数。 如果在函数声明和定义函数时都设置了默认参数,则以函数声明的默认参数为准。 代码如下:#include<iostream>using namespace std;int main(){ double add(double a=...

    50_引用作为函数参数和返回值的好处1

    2. **注意事项**: - **不能返回局部变量的引用**:因为局部变量在函数执行结束后会被销毁,返回其引用会导致悬空引用,可能会引发未定义行为。 - **不能返回动态分配内存的引用**:如果函数内部使用`new`分配内存...

    51单片机中断函数注意事项

    为了更好地理解和使用51单片机的中断功能,本文将详细介绍51单片机中断函数的注意事项。 #### 二、中断函数概述 在51单片机编程中,中断函数是一类特殊的函数,它们用于响应外部或内部事件而执行特定的任务。与普通...

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

    本文将对Python函数的缺省参数使用进行深入分析,并提出一些操作注意事项,以帮助编程者避免常见的误区。 首先,了解参数定义的顺序是非常重要的。在Python中定义函数时,参数的顺序必须遵循以下规则:首先列出所有...

    C语言函数参数的传递详解

    ### C语言函数参数的传递详解 #### 一、引言 在编程中,函数是非常重要的概念,它不仅可以提高代码的复用性,还能使程序结构更加清晰。在使用函数时,经常会涉及到参数的传递问题。对于不同的编程语言,参数传递的...

    函数细节注意事项.doc

    ### 函数细节注意事项 #### 一、函数参数规则 1. **参数完整性**:在定义函数时,确保每个参数都有明确的名字,不建议省略参数名。清晰的参数名有助于提高代码可读性和维护性。 2. **参数命名与顺序**:参数的...

    C#将全局变量的字符串变为函数参数

    #### 四、注意事项 1. **性能问题**:反射操作比普通的字段访问要慢得多,因此,在性能敏感的应用程序中应尽量避免使用。 2. **安全性**:反射允许代码动态地访问类的私有成员,这可能带来潜在的安全风险。 3. **...

    计算机组装与维护教学课件加载BIOS默认参数.pptx

    计算机组装与维护教学课件加载BIOS默认参数 加载BIOS默认参数是计算机组装与维护中的一项重要操作。BIOS(Basic Input/Output System)是计算机的基本输入/...但是,需要注意加载BIOS默认参数的注意事项和可能的风险。

    excel中averageif函数的使用方法.docx

    下面将详细介绍 AverageIF 函数的使用方法和注意事项。 AverageIF 函数的语法 AverageIF 函数的语法为:`AVERAGEIF(range, criteria, [average_range])`,其中: * `range`:指定要应用条件的单元格范围。 * `...

    用C语言实现参数个数可变的函数

    在C语言中,通常一个函数的参数个数是...以上知识点详细介绍了C语言中如何实现参数个数可变的函数,包括其原理、使用方法、注意事项以及最佳实践。在实际开发中,掌握这部分知识对于编写灵活且健壮的代码是非常重要的。

    基于C语言数组名作函数参数问题的分析研究.pdf

    尤其是在涉及数组时,数组名作为函数参数的处理会带来一系列的特殊问题和注意事项。本文档的内容主要针对在C语言编程中,当数组名用作函数参数时所产生的问题进行分析研究。以下为研究过程中所涉及的关键知识点。 1...

    使用过程命名参数

    五、注意事项 尽管命名参数带来了许多好处,但过度依赖命名参数可能会使代码变得冗余。因此,应适当地结合位置参数和命名参数使用,保持代码的简洁性。 总结,命名参数是编程中一个重要的特性,它提高了代码的...

    c语言函数参数的传递和值返回

    ### C语言函数参数的传递和值返回 #### 一、函数参数传递 ##### 1. 形式参数和实际参数 在C语言中,当我们调用一个函数时,需要了解两个概念:形式参数(formal parameters)和实际参数(actual parameters)。...

    在Python中居然可以定义两个同名通参数的函数

    #### 需要注意的事项 虽然Python允许这种函数覆盖的行为,但在实际开发中应该避免这样做。这种做法不仅会降低代码的可读性和可维护性,还可能导致难以追踪的错误。良好的编程实践建议每个函数都有明确的职责,并且...

    VB 可选参数举例

    三、使用可选参数的注意事项 1. 可选参数必须位于非可选参数之后,因为VB需要在没有提供参数值的情况下确定哪些是必需的,哪些是可以省略的。 2. 如果你想要在多个地方使用同一个默认值,可以考虑使用常量代替直接...

Global site tag (gtag.js) - Google Analytics