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)调用函数时候,编译器会不知道如何调用,会编译失败

  • 相关阅读:
    进程间通信-管道,消息,共享内存,信号量,信号,scoket
    高并发架构相关概念
    在WSL2中 安装 .NET Core SDK 进行Linux 开发工作
    OKR专题
    logback是怎么知道java代码的行数的?
    IDEA plugins
    [LeetCode] 956. Tallest Billboard 最高的广告牌
    上周热点回顾(8.10-8.16)团队
    【故障公告】腾讯云短信服务故障造成无法发送手机短信团队
    HBase~hbase-shaded-client解决包冲突问题
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664741.html
Copyright © 2011-2022 走看看