C++基础 inline 默认参数 函数占位参数 函数重载
1. inline内联函数
内联函数用于替换宏,
实例:
其中宏和 ++ 连用有副作用。
#include "iostream"
using namespace std;
#define MYFUNC(a, b) ((a) < (b) ? (a) : (b))  
inline int myfunc(int a, int b)
{
    return a < b ? a : b;
}
int main()
{
    ;
    ;
    //int c = myfunc(++a, b);
    int c = MYFUNC(++a, b);  
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
system("pause");
    ;
}
有以下注意:
(1)必须inline int myfunc(int a, int b)和函数体的实现,写在一块
(2)内联函数在最终生成的代码中没有定义,C++编译器直接将函数体插入函数调用处,所以内联函数没有普通函数调用时的额外开销(压栈,跳转,返回),也不能取地址。
(3)内联函数由编译器处理,直接将编译后的函数体插入调用的地方,宏由预处理器处理,进行简单文本替换,没有任何编译过程。
(4)内联编译的限制:
不能存在循环语句,不能有太多判断语句,函数体不能过于庞大,不能对函数体取地址,内联声明必须在调用语句之前。
2. 默认参数
如下:
)
{
    printf("x:%d\n", x);
}
规则:
(1)只有参数列表后面部分才可以使用默认参数。
(2)一旦在函数中使用默认参数,这个参数之后的参数都必须使用默认参数。
//在默认参数规则 ,如果默认参数出现,那么右边的都必须有默认参数
, , )
{
    printf("x:%d\n", x);
}
int main62(int argc, char *argv[])
{
    printAB();
    printAB();
    system("pause");
    ;
}
3. 函数占位参数
如下:
int func(int a, int b, int )
{
    return a + b;
}
int main01()
{
    //func(1, 2); //可以吗?
    printf(, , ));
    getchar();
    ;
}
函数占位参数:
(1)占位参数只有参数类型声明,而没有参数名声明
(2)一般情况下,在函数体内部无法使用占位参数。
函数占位参数与默认参数结合
)
{
    return a + b;
}
void main()
{
    //如果默认参数和占位参数在一起,都能调用起来
    func2(, );
    func2(, , );
    system("pause");
}
4. 函数重载
(1)函数重载的概念
当函数名或函数参数不同时,函数的含义不同。
(2)函数重载的判断标准
参数类型,个数、顺序
返回值不是判断标准。
(3)编译器调用函数重载的准则
将所有同名函数作为候选者
进行精准匹配实参,和默认参数匹配实参
如果失败,进行默认类型转换匹配实参。
如果失败,就失败。
匹配不能出现二义性。
(4)函数重载与函数默认参数
//当函数默认参数遇上函数重载会发生什么
)
{
    return a * b * c;
}
int func(int a, int b)
{
    return a + b;
}
//1个参数的允许吗
int func(int a)
{
    return a + b;
}
int main()
{
    ;
    c = func(, ); // 存在二义性,调用失败,编译不能通过 
    printf("c = %d\n", c);
    printf("Press enter to continue ...");
    getchar();
    ;
}
5. 函数重载和函数指针
/*
函数重载与函数指针
    当使用重载函数名对函数指针进行赋值时
    根据重载规则挑选与函数指针参数列表一致的候选者
    严格匹配候选者的函数类型与函数指针的函数类型
*/
int func(int x) // int(int a)
{
    return x;
}
int func(int a, int b)
{
    return a + b;
}
int func(const char* s)
{
    return strlen(s);
}
typedef int(*PFUNC)(int a); // int(int a)
int main()
{
    ;
    PFUNC p = func;
    c = p();
    printf("c = %d\n", c);
    printf("Press enter to continue ...");
    getchar();
    ;
}
C++基础 inline 默认参数 函数占位参数 函数重载的更多相关文章
- const引用和函数占位参数遇上默认参数以及内联函数
		
1.const引用: 但是加上const之后是可以的,const int &a=100;就不会报错了. 2.函数占位参数: 如果给最后的占位参数加上默认值: 3.内联函数 内联只是对编译器发起 ...
 - c++——默认参数、函数占位参数
		
2 默认参数 /*1 C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替 */ void myPrint(int x = 3) { printf ...
 - C++对C语言的拓展(3)—— 默认参数和占位参数
		
通常情况下,函数在调用时,形参从实参那里取得值.对于多次调用同一函数同一 实参时,C++给出了更简单的处理办法.给形参以默认值,这样就不用从实参那里取值了. 1.单个默认参数 若填写参数,使用你填写的 ...
 - 3.C++内联函数,默认参数,占位参数
		
本章主要内容: 1)内联函数(替代宏代码段) 2)默认参数 3)占位参数 1.C++的内联函数分析 1.1讲解内联函数之前,首先回忆下之前讲的define宏定义: 之前讲过宏定义会经过预处理器进行文本 ...
 - C++对C的函数拓展 - 占位参数
		
函数占位参数 占位参数只有参数类型声明,而没有参数名声明 一般情况下,在函数体内部无法使用占位参数 demo #include <iostream> using namespace std ...
 - 【C/C++】函数的默认参数/函数的占位参数/函数重载/注意事项
		
函数的默认参数 返回值类型 函数名(参数=默认值){} #include <iostream> using namespace std; int func(int a = 10, int ...
 - 我的c++学习(6)默认参数和内联函数
		
默认参数 一般情况下,函数调用时实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有默认参数的函数,这种函数调用时实参个数可以与形参不相同.“默认参数”指在定义或声明函数时为形参指定默认 ...
 - python基础——函数的参数
		
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
 - 特殊用途语言特性——默认参数、内联函数和constexptr函数
		
1 默认实参 某些函数有这样一些参数,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 我们可 ...
 
随机推荐
- Java执行Shell脚本
			
Linux 系统下采用 Java 执行 Shell 脚本,直接上代码: package com.smbea.demo; import java.io.BufferedReader; import ja ...
 - easyui datagrid 表格中操作栏 按钮图标不显示
			
jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染 解决办法: 使用解析器 Parser(解析器) $.parser.parse(); // 解析所有页面 $.par ...
 - 零基础逆向工程34_Win32_08_线程控制_CONTEXT结构
			
线程控制 实验 挂起线程 ::SuspendThread(hThread); 恢复线程 ::ResumeThread(hThread); 终止线程 (这里讲了同步调用与异步调用) 方式一: 此方法结束 ...
 - poi3.8随记
			
System.out.println(sheet.getFirstRowNum());//结果是0 System.out.println(sheet.getLastRowNum());//如果一共有3 ...
 - JSP中的Property 'name' not found on type java.lang.String
			
如果是在forEach中出现. 那么看下items里是不是没有el表达式,只是个字符串. 今天犯了好几次. 特此记录
 - 【起航计划 028】2015 起航计划 Android APIDemo的魔鬼步伐 27  App->Preferences->Launching preferences 其他activity获取Preference中的值
			
前给例子介绍了如何使用PreferenceActivity 来显示修改应用偏好,用户对Preferences的修改自动存储在应用对应的Shared Preferences中. 本例介绍了如何从一个Ac ...
 - 第四章 T-SQL编程
			
1.前言->此T-SQL编程是基于sql server开发环境->关键字:T-SQL编程:游标:视图和索引 2.T-SQL编程基础->标识符:常规标识符必须以汉字.字母.下划线_.@ ...
 - python3基础13(format的使用)
			
#!/usr/bin/env python# -*- coding:utf-8 -*- from string import Templatedict={'name':'python','age':2 ...
 - 关于BaseServlet
			
BaseServlet 是项目中所有servlet的父类,作用是为了让一个servlet可以同时处理多个请求,因为我们之前比如说完成对于商品的增删改查的时候,每一个需求就要创建一个servlet,这样 ...
 - 水晶报表分组,统计,求和,sum()函数使用
			
--Sum()函数统计的是明细所有的和 Sum(字段名) --根据分组字段统计的和 Sum ({xh_Getdinggoudan;1.Djine} ,{xh_Getdinggoudan;1.Ddgda ...