zoukankan      html  css  js  c++  java
  • C++学习笔记-C++对C语言的函数拓展

    内联函数

    内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质

    inline关键字只是给编译器一个建议,编译器不一定会接受这种建议。一些编译器,会将简单的函数做内联编译,即使它没有用inline关键字声明
    C++编译器直接将函数体插入函数调用的地方
    内联函数没有普通函数调用时的额外开销(压栈,跳转,返回)

    inline int func(int a, int b)
    {
    	return a < b ? a : b;
    }
    

    C++中内联编译的限制

    1. 不能存在任何形式的循环语句;
    2. 不能存在过多的条件判断语句;
    3. 函数体不能过于庞大;
    4. 不能对函数进行取址操作;(内敛编译后,内联函数将不存在)
    5. 函数内联声明必须在调用语句之前。
      如果存在以上冲突,C++编译器会忽略inline关键字

    默认参数

    C++支持设置默认参数,在函数调用的时候不赋值会使用默认值

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

    如果有多个参数,默认参数要放在参数列表最后面

    void func(int a, int b, int x = 3, int y = 4)
    {
    	printf("x:%d
    ", x);
    }
    

    占位参数

    有时候在函数定义时候,会有不确定参数
    此时会有占位参数,调用的时候需要按位赋值
    占位参数一般用于程序的拓展和对C代码的兼容

    int func (int x, int y, int )
    {
    	return x + y;
    }
    

    占位参数可以设置默认参数
    设置默认参数以后,函数调用时候可以省略

    int func2(int a, int b, int = 0)
    {
    	return a + b;
    }
    

    函数重载

    C++允许函数重载
    C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,函数重载不涉及函数返回值

    void myprint(int a)
    {
    	printf("a:%d 
    ", a);
    }
    
    void myprint(int a, char b)
    {
    	printf("a:%d 
    ", a);
    }
    

    当函数重载与默认函数参数时候会产生二义性

    int func(int a, int b , int c= 0)
    {
    	printf("a:%d ", a);
    	return 0;
    }
    
    int func(int a, int b)
    {
    	printf("a:%d ", a);
    	return 0;
    }
    

    当使用func(1,2)调用函数时候,编译器会不知道如何调用,会编译失败

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664742.html
Copyright © 2011-2022 走看看