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的类型,所以编译器报错。

  • 相关阅读:
    原始字符串
    .Net Core 常见错误解决记录
    P1010 幂次方 P1022 计算器的改良
    P1036 选数
    广度优先遍历
    P4327 彼得潘框架
    链表
    标准库与标准模板库
    信息学竞赛打表犯规吗?
    对拍程序
  • 原文地址:https://www.cnblogs.com/xiebiandreamhigh/p/3346930.html
Copyright © 2011-2022 走看看