zoukankan      html  css  js  c++  java
  • 9.30

    1.在C/C++语言中,函数名代表函数的入口地址,那么我们可以将这个地址放在一个指针变量中,这个指针变量就是指向函数的指针,如下代码:

    int add(int a, int b); //返回a, b之和

    int (*ptrfun)(int a, int b);  //ptrfun是指向函数的指针

    ptrfun=add; //赋值

    ptrfun(1,3); //调用

    或者以另一种形式赋值:

    int (*ptrfun)(int a, int b)=add;

    这里我们写了一个关于加法的函数模板:

    template<typename T>

    T add(const T &a, const T &b)

    {

          return a+b;

    }

    int (*pfun)(const int &a ,const int &b)=add;

    //此时编译器在会以整型来实例化函数模板

    如果编译器不能从函数指针类型(如上例中的函数指针所指函数有整型参数)推断出函数模板的类型,那么编译器就会报错。如下例:

    template<typename T>

    T add(const T &a, const T &b)

    {

          return a+b;

    }

    //定义重载函数func,注意此这两个func函数的参数分别是指向不同函数的指针

    void func(int (*)(const int&, const int&));

     //指向两个整型数相加函数

    void func(string (*)(const string&, conststring&));

    //指向两个字符串连接函数

    func(add); //编译器报错

    //error C2668: 'func' : ambiguous call to overloadedfunction

    原因分析:当执行func(add)时,要进行参数传递,相当于

    func=add,此时的func有两种类型,编译器无法推断出模板函数add的类型,所以编译器报错。

  • 相关阅读:
    2019.6.28 校内测试 T3 【音乐会】道路千万条
    2019.6.28 校内测试 T2 【音乐会】二重变革
    2019.6.28 校内测试 T1 Jelly的难题1
    CentOS7:ifconfig command not found解决和netstat -an
    centos系统查看本机IP地址
    centos 端口iptables配置
    centos -bash: netstat: command not found
    Centos 安装 NodeJS
    Go语言-变量和常量
    go get
  • 原文地址:https://www.cnblogs.com/xiebiandreamhigh/p/3346930.html
Copyright © 2011-2022 走看看