• 函数重载


    函数重载遇上默认参数;

    #include<stdio.h>
    #include<string.h>
    
    int fun(int a, int b, int c = 0)
    {
        return a * b * c;  
    }
    
    int fun(int a, int b)
    {
        return a + b ;  
    }
    
    int main(void)
    {
    
        int c =  fun(1,2);
    
        return 0;
    }

    编译器报错,因为 int c = fun(1,2);  这里调用两个函数都可以,所以编译器会报错;

    当函数默认参数和函数重载相冲突时,编译器会报错;

    这是C++的问题,C++引用了很多特性,特性之间会冲突;后续语言java和C#,他们就没有默认参数这种特性;C++众多的特性有可能是相互冲突的;

    函数重载的本质,函数重载是由函数名和参数列表决定的;重载函数在本质上是相互独立不同函数;重载函数的函数类型不同;函数的返回值不能作为函数重载的依据;

     1 #include<stdio.h>
     2 
     3 int add(int a, int b)
     4 {
     5     return a + b;
     6 }
     7 int add(int a, int b, int c)
     8 {
     9     return a + b + c;
    10 }
    11 
    12 int main(int argc, char **argv)
    13 {
    14     printf("(int(*)(int,int))add = %p
    ", (int(*)(int,int))add);
    15     printf("(int(*)(int,int,int))add = %p
    ", (int(*)(int,int,int))add);
    16     return 0;
    17 }
    (int(*)(int,int))add = 0x8048474
    (int(*)(int,int,int))add = 0x8048482

    注意:

    函数重载必须发生在同一个作用域里面

    编译器需要参数列表或函数类型进行函数选择;

    无法直接通过函数名得到重载函数的入口地址;

    C++调用C代码

    extern关键字可以, C++编译器定义了__cplusplus

  • 相关阅读:
    ABCD 谁是小偷
    三剑客-awk(简写)
    三剑客-sed(简写)
    Mysql锁
    MySQL两种内核对比
    netty源码分析(一)
    netty源码分析(二)
    网络编程之NIO
    网络编程之ByteBuffer
    线程池的原码分析(二)
  • 原文地址:https://www.cnblogs.com/yr-linux/p/6415597.html
Copyright © 2020-2023  润新知