码迷,mamicode.com
首页 > 编程语言 > 详细

C++基础 inline 默认参数 函数占位参数

时间:2018-10-13 17:20:53      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:语句   stream   get   return   声明   c++   返回   int   情况   

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 a = 1;
    int b = 3;
    //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");
    return 0;
}

 

有以下注意:

(1)必须inline int myfunc(int a, int b)和函数体的实现,写在一块

(2)内联函数在最终生成的代码中没有定义,C++编译器直接将函数体插入函数调用处,所以内联函数没有普通函数调用时的额外开销(压栈,跳转,返回),也不能取地址。

(3)内联函数由编译器处理,直接将编译后的函数体插入调用的地方,宏由预处理器处理,进行简单文本替换,没有任何编译过程。

(4)内联编译的限制:

   不能存在循环语句,不能有太多判断语句,函数体不能过于庞大,不能对函数体取地址,内联声明必须在调用语句之前。

2. 默认参数

如下:

void printAB(int x = 3)
{
    printf("x:%d\n", x);
}

规则:

(1)只有参数列表后面部分才可以使用默认参数。

(2)一旦在函数中使用默认参数,这个参数之后的参数都必须使用默认参数。

//在默认参数规则 ,如果默认参数出现,那么右边的都必须有默认参数
void printABC(int a, int b, int x = 3, int y=4, int z = 5)
{
    printf("x:%d\n", x);
}
int main62(int argc, char *argv[])
{
    printAB(2);
    printAB();
    system("pause");
    return 0;
}

3. 函数占位参数

如下:

int func(int a, int b, int ) 
{
    return a + b;
}

int main01()
{
    //func(1, 2); //可以吗?
    printf("func(1, 2, 3) = %d\n", func(1, 2, 3));

    getchar();    
    return 0;
}

函数占位参数:

(1)占位参数只有参数类型声明,而没有参数名声明

(2)一般情况下,在函数体内部无法使用占位参数。

 

函数占位参数与默认参数结合

int func2(int a, int b, int = 0)
{
    return a + b;
}
void main()
{
    //如果默认参数和占位参数在一起,都能调用起来
    func2(1, 2);
    func2(1, 2, 3);
    system("pause");
}

 

C++基础 inline 默认参数 函数占位参数

标签:语句   stream   get   return   声明   c++   返回   int   情况   

原文地址:https://www.cnblogs.com/yangxinrui/p/9783420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!